분류: 개발 도구
JSON → Zod 스키마 변환기
데이터를 업로드하지 않고 샘플 JSON에서 Zod 스키마 생성
JSON을 붙여넣으면 브라우저에서 Zod 스키마를 만듭니다. 객체, 배열, 문자열, 숫자, 불리언, null, 선택 필드를 추론하고 TypeScript에 바로 쓸 수 있는 결과를 복사하세요. 아무것도 업로드되지 않습니다.
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자 미만이어야 한다거나 세 가지 허용값 중 하나여야 한다는 것을 보여주지는 않습니다. 결과물은 다듬어 나갈 뼈대이지 완성된 계약이 아닙니다.
사용 방법
- 대표적인 JSON 샘플을 붙여넣으세요. 다양한 경우를 담을수록 추론이 좋아집니다.
- 스키마 이름을 정하고 zod import와 추론된 타입을 포함할지 선택하세요.
- 생성된 코드를 복사한 뒤, 샘플로는 드러나지 않았던 필드 규칙을 직접 다듬으세요.
개인정보
이 도구는 전부 브라우저 안에서 동작합니다. 입력한 내용은 업로드되거나 저장되거나 공유되지 않으며, 탭을 닫으면 사라집니다.
자주 묻는 질문
- 제 JSON이 업로드되나요?
- 아니요. JSON 파싱과 스키마 생성 모두 브라우저 탭 안에서 이루어집니다. 입력도 출력도 서버로 전송되거나 기록되거나 저장되지 않습니다.
- 추론된 검증은 얼마나 정확한가요?
- 샘플만큼 정확합니다. 구조와 타입은 충실히 담아내지만 구조가 표현하지 못하는 제약 — 형식, 범위, 열거값, 실제 운영에서 정말 필수인 필드 — 은 알 수 없습니다. 신뢰하기 전에 필드마다 검토하세요.
- 배열과 선택 필드도 처리하나요?
- 네. 배열은 z.array(...)가 되고, 배열 안 객체들의 키가 다르면 모든 요소에 없는 키는 .optional()로 표시됩니다. 가끔 null이던 필드는 .nullable()이 됩니다.
- 결과를 TypeScript에서 쓸 수 있나요?
- 네. 생성된 파일은 스키마를 export하고, 옵션을 켜 두면 `z.infer` 타입 별칭도 함께 내보냅니다. 하나의 정의에서 검증기와 그에 맞는 정적 타입을 동시에 얻습니다.