본문으로 건너뛰기

JSON을 Zod 스키마로 변환

json-to-zod 라이브러리로 JSON 샘플에서 Zod 스키마를 생성합니다. 각 값은 z.string(), z.number(), z.boolean(), z.null() 또는 중첩된 z.object()에 대응하며, 빈 배열은 z.array(z.unknown())이 됩니다.

예시만 있는 API 응답에 대한 런타임 검증기 초안을 만들 때.

JSON

Zod Schema

이럴 때 사용하세요

  • 예시만 있는 API 응답에 대한 런타임 검증기 초안을 만들 때.
  • 스키마를 직접 작성하지 않고 폼이나 설정 로더에 Zod 검증을 추가할 때.

사용 방법

  1. 대표적인 JSON 샘플을 왼쪽 편집기에 붙여 넣습니다.
  2. schema 이외의 이름을 쓰려면 설정을 열고 Root Schema Name을 지정합니다.
  3. 코드를 복사한 뒤 실제 사양에 맞춰 .optional(), .email(), .min() 같은 규칙을 추가해 강화합니다.

JSON 샘플

{
  "id": 42,
  "email": "[email protected]",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Zod 스키마(TypeScript)

import { z } from "zod"

export const schema = z.object({
  id: z.number(),
  email: z.string(),
  roles: z.array(z.string()),
  profile: z.object({ nickname: z.null(), verified: z.boolean() }),
  tags: z.array(z.unknown()),
})

세부 정보 및 제한 사항

생성은 브라우저에서 실행되며 라이브러리는 필요할 때 불러옵니다.

타입은 샘플 하나에서 추론됩니다. null은 .nullable()이 아니라 z.null()이 되고, 누락된 키는 optional로 표시되지 않습니다.

요소 구조가 다른 배열은 각 구조의 z.union([...])이 되므로 직접 병합해야 할 수 있습니다.

email, 날짜, UUID 같은 형식은 감지하지 않으며 모두 z.string()이 됩니다.

FAQ

루트가 배열인 JSON도 변환할 수 있나요?

네. 루트 배열은 z.array(...)가 됩니다. 객체의 키가 서로 다르면 각기 다른 객체가 z.union의 멤버가 됩니다.

null 값은 어떤 타입이 되나요?

null만 허용하는 z.null()이 됩니다. 필드가 문자열일 수도 있다면 z.string().nullable()로 바꾸세요.

누락된 필드에 .optional()을 추가하나요?

아니요. 샘플의 모든 키는 필수입니다. optional 필드는 직접 표시하세요.

사양 및 참고 자료