Skip to content

JSON to Zod 스키마 변환기

온라인 JSON to Zod 스키마 변환기. 붙여넣으면 즉시 Zod 스키마를 생성합니다. 100% 브라우저 처리. z.number().int(), .optional(), .nullable() 지원. 무료.

트래킹 없음 브라우저 실행 무료
옵션
0
Zod 출력
0
실제 API 페이로드에 대해 Zod v3와 v4의 파싱 시맨틱에 맞춰 출력을 검증 완료. — Go Tools Team · Jul 2, 2026

Zod 스키마란 무엇인가요?

Zod 스키마는 값의 형태를 TypeScript 우선으로 기술한 것으로, 런타임에 데이터를 검증하고 컴파일 타임에 정적 타입을 추론합니다. JSON 샘플에서 하나를 생성하면 API 응답, 폼, 설정 파일을 위해 검증 보일러플레이트를 손으로 쓸 필요가 없습니다. 이 Zod 스키마 생성기는 올바른 타입을 추론하고, 없는 키를 .optional()로, null 값을 .nullable()로 표시하며, z.infer 타입을 건네줍니다 — 모두 100% 브라우저에서 이뤄집니다.

예시

API 응답

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
import { z } from "zod";

export const RootSchema = z.object({
  id: z.number().int(),
  name: z.string(),
  email: z.string(),
  active: z.boolean(),
  roles: z.array(z.string()),
});

export type Root = z.infer<typeof RootSchema>;

일반적인 REST 페이로드가 바로 사용할 수 있는 Zod 스키마가 됩니다. 정수는 z.number().int()로 추론되고 roles 배열은 z.array(z.string())가 됩니다. z.infer 타입도 무료로 제공됩니다.

중첩 객체

{"repo":"zod","owner":{"login":"colinhacks","id":100}}
import { z } from "zod";

export const OwnerSchema = z.object({
  login: z.string(),
  id: z.number().int(),
});

export const RootSchema = z.object({
  repo: z.string(),
  owner: OwnerSchema,
});

export type Root = z.infer<typeof RootSchema>;

중첩 객체는 필드에서 참조되는 별도의 명명된 스키마(OwnerSchema)가 됩니다. 자식 스키마는 그것을 사용하는 부모보다 먼저 선언되며, 동일한 형태는 한 번만 선언되어 재사용됩니다.

객체 배열(선택적 필드)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
import { z } from "zod";

export const UserSchema = z.object({
  id: z.number().int(),
  nick: z.string().optional(),
});

export const RootSchema = z.object({
  users: z.array(UserSchema),
});

export type Root = z.infer<typeof RootSchema>;

객체 배열은 하나의 요소 스키마로 병합됩니다. 일부 항목에 없는 키는 .optional()이 되므로, 그 키가 없어도 파싱은 여전히 성공합니다.

Nullable 필드와 숫자 통합

{"items":[{"sku":"A1","discount":0.1},{"sku":"A2","discount":null}]}
import { z } from "zod";

export const ItemSchema = z.object({
  sku: z.string(),
  discount: z.number().nullable(),
});

export const RootSchema = z.object({
  items: z.array(ItemSchema),
});

export type Root = z.infer<typeof RootSchema>;

일부 샘플에서는 null이지만 다른 샘플에서는 타입이 있는 필드는 .nullable()이 됩니다. 0.1에는 소수점이 있으므로 숫자는 z.number().int()가 아니라 z.number()로 통합됩니다.

JSON을 Zod로 변환하는 방법

  1. 1

    JSON 붙여넣기

    JSON 객체, 배열 또는 API 응답을 입력 상자에 넣으세요. 변환이 즉시 시작됩니다.

  2. 2

    출력 조정

    루트 스키마의 이름을 바꾸고 import 줄, z.infer 타입, export 키워드를 토글하여 프로젝트 스타일에 맞추세요.

  3. 3

    복사 또는 다운로드

    생성된 Zod 스키마를 한 번의 클릭으로 가져와 검증 계층에 바로 붙여넣으세요.

Common Use Cases

API 응답 검증
샘플 REST나 GraphQL 응답을 Zod 스키마로 바꿔 fetch 경계에서 파싱하면, 잘못된 데이터가 앱으로 새어 들지 않고 명확한 오류로 빠르게 실패합니다.
타입 안전한 폼과 입력
폼이나 쿼리 입력의 스키마를 생성하고 UI와 핸들러 전반에서 z.infer 타입을 재사용하여 엔드투엔드 타입 안전성을 얻으세요.
tRPC와 AI 도구 스키마
예시 페이로드에서 tRPC 프로시저나 AI 구조화 출력 도구의 입력·출력 스키마를 손으로 쓰지 않고 부트스트랩하세요.

변환이 작동하는 방식

구조적 추론
각 객체는 명명된 스키마가 되며, 동일한 형태는 한 번만 선언되어 재사용됩니다. 객체 배열은 키 단위로 병합되고, 일부 항목에 없는 키는 .optional()이 됩니다.
올바른 타입 매핑
정수는 z.number().int()로, 소수는 z.number()로 매핑됩니다. 문자열, 불리언, null은 각각 z.string(), z.boolean(), z.null()로 매핑되고, 원시 타입이 섞인 배열은 z.union()이 됩니다.
TypeScript 타입 포함
루트 스키마에 z.infer 타입 별칭이 방출되므로 스키마가 유일한 정보 출처로 유지되고 타입이 검증에서 어긋나지 않습니다.
100% 클라이언트 측
파싱과 생성이 네트워크 호출 없이 브라우저에서 실행되므로 데이터가 비공개로 유지됩니다.

깔끔한 Zod 스키마를 위한 팁

루트 스키마 이름 짓기
읽기 쉽고 자체 문서화되는 코드를 위해 기본값 Root 대신 User나 ApiResponse 같은 의미 있는 루트 이름을 설정하세요.
z.unknown()과 유니온 정교화
비어 있거나 혼합된 배열은 z.unknown()이나 광범위한 z.union()을 생성합니다. 더 풍부하고 대표적인 샘플을 붙여넣어 도구가 정확한 타입을 추론하게 한 다음, 모호하게 남는 부분을 좁히세요.
경계에서 검증하기
신뢰할 수 없는 데이터가 들어오는 곳 — API 응답, 폼 입력, 웹훅 — 에서 safeParse()를 호출하여, 잘못된 데이터가 애플리케이션 로직에 도달하기 전에 잡으세요.

자주 묻는 질문

JSON을 Zod 스키마로 어떻게 변환하나요?
왼쪽 상자에 JSON을 붙여넣으세요. 변환기가 브라우저에서 즉시 파싱하여 오른쪽에 Zod 스키마와 z.infer 타입 별칭을 함께 생성합니다. 복사를 클릭하면 가져올 수 있습니다 — 업로드도, 계정도, 대기 시간도 없습니다.
JSON to Zod와 JSON Schema to Zod의 차이는 무엇인가요?
이 도구는 샘플 JSON 값 — API 응답이나 객체 — 을 받아 그 형태에서 Zod 스키마를 추론합니다. JSON Schema to Zod는 다른 작업으로, 기존 JSON Schema 문서를 Zod로 변환합니다. 원시 데이터가 있으면 이 도구를, 이미 JSON Schema 파일이 있으면 그것을 변환하세요.
스키마에서 TypeScript 타입을 어떻게 얻나요?
모든 결과에 z.infer 타입 별칭이 포함되므로 손으로 쓰지 않고도 완전히 타입이 지정된 Root를 얻습니다. 스키마를 유일한 정보 출처로 유지하고 TypeScript가 타입을 도출하게 하면 둘이 어긋나지 않습니다. 스키마만 원하면 옵션에서 z.infer 줄을 끌 수 있습니다.
선택적 필드와 null 필드는 어떻게 처리되나요?
어떤 키가 일부 배열 항목에는 있고 다른 항목에는 없으면 해당 필드는 .optional()로 표시됩니다. 일부 샘플에서는 null이고 다른 샘플에서는 타입이 있는 필드는 .nullable()이 됩니다. 항상 null이기만 한 필드는 z.null()이 됩니다. Zod는 optional과 nullable을 독립적으로 다루므로 스키마가 데이터의 실제 변화와 일치합니다.
어떤 숫자 타입을 생성하나요?
정수는 z.number().int()로 매핑되고, 소수점이나 지수가 있는 값은 z.number()로 매핑됩니다. 어떤 필드가 샘플 전반에서 정수와 소수를 섞어 쓰면 z.number()로 통합되어, 검증이 정당한 값을 거부하지 않습니다.
출력이 Zod 3과 Zod 4에서 동작하나요?
네. 생성된 코드는 공통되고 안정적인 하위 집합 — z.object, z.string, z.number, z.array, z.union, .int, .optional, .nullable, z.infer — 를 사용하며, 이들은 Zod 3과 Zod 4에서 동일하게 동작합니다. 프로젝트에 zod 패키지가 설치되어 있는지만 확인하세요.
생성된 스키마로 데이터를 어떻게 검증하나요?
스키마를 임포트하고 RootSchema.parse(data)를 호출하면 잘못된 입력에서 예외를 던지고, RootSchema.safeParse(data)를 호출하면 예외를 던지지 않고 타입이 지정된 성공 또는 오류 결과를 반환합니다. 이는 API 응답, 폼 입력, 환경 설정 같은 신뢰 경계에서 이상적입니다.
배열과 혼합 타입은 어떻게 처리되나요?
한 가지 타입의 배열은 그 타입의 z.array가 됩니다. 객체 배열은 키 단위로 하나의 요소 스키마로 병합됩니다. 원시 타입이 섞인 배열은 z.union이 되고, 더 모호한 것은 z.unknown으로 폴백하므로 더 풍부한 샘플에서 정교하게 다듬을 수 있습니다.
제 JSON 데이터는 비공개이고 안전한가요?
네. 변환은 JavaScript를 사용해 100% 브라우저에서 처리됩니다. 토큰, ID, 고객 데이터를 포함한 JSON이 페이지를 벗어나지 않으며 서버로 전송되지 않습니다.
이 도구는 무료인가요? 계정이 필요한가요?
가입도, 제한도, 작업 공간을 어지럽히는 광고도 없이 완전히 무료입니다.

Base64 디코더 · 인코더 (Base64 Decoder & Encoder)

인코딩 & 포매팅

Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.

Base64 이미지 변환기 (온라인)

인코딩 & 포매팅

Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.

CSV to JSON 변환기 (CSV to JSON Converter)

인코딩 & 포매팅

브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.

.env을 JSON으로 변환하는 도구

인코딩 & 포매팅

.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.

무료 HTML 엔티티 디코더 — HTML 언이스케이프

인코딩 & 포매팅

온라인에서 HTML 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.

무료 HTML 엔티티 인코더 — HTML 이스케이프

인코딩 & 포매팅

온라인에서 HTML 엔티티를 인코딩하고 특수문자(< > & " ')를 이스케이프하세요. 무료, 100% 브라우저에서 처리. 이름·10진수·16진수 출력, 업로드 없음.