분류: 개발 도구

JSON → Zod 스키마 변환기

자체 기획 도구찾는 도구가 없나요?

데이터를 업로드하지 않고 샘플 JSON에서 Zod 스키마 생성

JSON을 붙여넣으면 브라우저에서 Zod 스키마를 만듭니다. 객체, 배열, 문자열, 숫자, 불리언, null, 선택 필드를 추론하고 TypeScript에 바로 쓸 수 있는 결과를 복사하세요. 아무것도 업로드되지 않습니다.

Zod 스키마
import { z } from "zod";

export const userSchema = z.object({
  id: z.number(),
  name: z.string(),
  isActive: z.boolean(),
  score: z.null(),
  tags: z.array(z.string()),
  address: z.object({
    city: z.string(),
    country: z.string(),
  }),
  posts: z.array(z.object({
    slug: z.string(),
    views: z.number(),
    pinned: z.boolean().optional(),
  })),
});

export type User = z.infer<typeof userSchema>;

이 샘플만으로 추론합니다. 어떤 필드에 문자열이 들어 있었다는 것은 알 수 있지만, 그 문자열이 이메일이어야 한다거나 최소 길이가 있다거나 허용된 몇 가지 값 중 하나여야 한다는 것은 알 수 없습니다. 출력은 출발점으로 삼고 규칙은 직접 다듬으세요.

이 페이지의 모든 처리는 브라우저에서 이루어집니다. 업로드는 없습니다.

이 페이지의 모든 처리는 브라우저에서 이루어집니다. 업로드는 없습니다.

이 도구로 할 수 있는 일

이 도구는 샘플 JSON을 로컬에서 읽어 중첩 객체, 배열, 유니온을 포함한 Zod 객체 스키마 초안을 작성합니다. 배열 안 객체들이 서로 맞지 않을 때 — 한 요소에는 `pinned`가 있고 다음 요소에는 없을 때 — 그 키는 조용히 버려지는 대신 `.optional()`로 표시됩니다. 대개 그 불일치야말로 가장 알아차려야 했던 부분이기 때문입니다. 가끔 null이던 값은 두 항목짜리 유니온 대신 `.nullable()`이 됩니다. 할 수 없는 일은 본 적 없는 규칙을 지어내는 것입니다. 샘플 데이터는 어떤 필드에 문자열이 들어 있었다는 것을 보여줄 뿐, 그 문자열이 이메일이어야 한다거나 80자 미만이어야 한다거나 세 가지 허용값 중 하나여야 한다는 것을 보여주지는 않습니다. 결과물은 다듬어 나갈 뼈대이지 완성된 계약이 아닙니다.

사용 방법

  1. 대표적인 JSON 샘플을 붙여넣으세요. 다양한 경우를 담을수록 추론이 좋아집니다.
  2. 스키마 이름을 정하고 zod import와 추론된 타입을 포함할지 선택하세요.
  3. 생성된 코드를 복사한 뒤, 샘플로는 드러나지 않았던 필드 규칙을 직접 다듬으세요.

개인정보

이 도구는 전부 브라우저 안에서 동작합니다. 입력한 내용은 업로드되거나 저장되거나 공유되지 않으며, 탭을 닫으면 사라집니다.

자주 묻는 질문

제 JSON이 업로드되나요?
아니요. JSON 파싱과 스키마 생성 모두 브라우저 탭 안에서 이루어집니다. 입력도 출력도 서버로 전송되거나 기록되거나 저장되지 않습니다.
추론된 검증은 얼마나 정확한가요?
샘플만큼 정확합니다. 구조와 타입은 충실히 담아내지만 구조가 표현하지 못하는 제약 — 형식, 범위, 열거값, 실제 운영에서 정말 필수인 필드 — 은 알 수 없습니다. 신뢰하기 전에 필드마다 검토하세요.
배열과 선택 필드도 처리하나요?
네. 배열은 z.array(...)가 되고, 배열 안 객체들의 키가 다르면 모든 요소에 없는 키는 .optional()로 표시됩니다. 가끔 null이던 필드는 .nullable()이 됩니다.
결과를 TypeScript에서 쓸 수 있나요?
네. 생성된 파일은 스키마를 export하고, 옵션을 켜 두면 `z.infer` 타입 별칭도 함께 내보냅니다. 하나의 정의에서 검증기와 그에 맞는 정적 타입을 동시에 얻습니다.