JSON → Zod スキーマ

JSONデータからZodバリデーションスキーマを即座に生成。ネストオブジェクト・配列・nullable・省略可能プロパティに対応。ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
スキーマ定数と推論した型の名前を設定します。空欄では Root を使います。変更後は「Zod スキーマを生成」で適用します。
生成する z.object スキーマに .strict() を付け、Zod が余分なキーを拒否するようにします。「Zod スキーマを生成」で適用します。
現在の JSON、ルート名、ストリクトモードで生成します。Ctrl/⌘+Enter でも生成できます。
入力をネストされたオブジェクト、配列、null を含むサンプルに置き換え、現在のルート名とストリクトモードで生成します。
JSON、出力、ステータスを消去し、ルート名とストリクトモードは保持します。ツール内の Ctrl/⌘+L ではルート名も消去します。
有効な JSON を入力します。入力を止めてから 300 ミリ秒後に生成し、無効な JSON では出力を消去します。ルートにはオブジェクト、配列、プリミティブを使えます。
Zod スキーマ出力
Zod のインポート、スキーマ、推論した型を含む表示中の TypeScript コードを全文コピーします。出力が空の場合はコピーしません。

JSON を入力するかサンプルを読み込むと、Zod スキーマを生成します。

例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

出力形式

完全なTypeScriptスニペットを出力します:

  • import { z } from “zod” — Zodインポート
  • const FooSchema = z.object({…}) — スキーマ定義
  • export type Foo = z.infer<typeof FooSchema> — 推論されたTypeScript型

主な用途

  • APIバリデーション:APIレスポンス例からスキーマを生成し、実際のレスポンスを実行時に検証。
  • フォームバリデーション:フォームのデータ形状をZodスキーマに変換してreact-hook-formなどで活用。
  • 設定ファイル:JSONファイルから読み込む設定オブジェクトの定義と検証。
  • 型安全性:TypeScriptと組み合わせて1つのスキーマから実行時検証と静的型推論を同時に取得。

変換例

ルート名を User にして次の JSON を入力すると、

{
  "id": 42,
  "email": "alice@example.com",
  "price": 19.9,
  "tags": ["admin", "beta"],
  "metadata": null,
  "orders": [
    { "sku": "A1", "qty": 2 },
    { "sku": "B7", "qty": 1, "note": "gift" }
  ]
}

次のように出力されます。

import { z } from "zod";

const UserSchema = z.object({
  id: z.number().int(),
  email: z.string(),
  price: z.number(),
  tags: z.array(z.string()),
  metadata: z.null(),
  orders: z.array(z.object({
    sku: z.string(),
    qty: z.number().int(),
    note: z.string().optional(),
  })),
});

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

note は 2 件の注文のうち 1 件にしかないので optional になります。出力には Zod 3 と Zod 4 の両方で動く書き方だけを使っています。

生成したスキーマの調整

サンプルには各フィールドの値が 1 つしかないため、業務ルールは推論できません。使う前に次の点を確認してください。

生成結果問題修正(Zod 4)
email: z.string()どんな文字列も通るz.email()(Zod 3 は z.string().email())
qty: z.number().int()常に整数の場合だけ正しい。サンプルが price: 10 でも .int() になり、あとで 10.5 が “expected int” で失敗する価格は z.number() にし、.min(0) や .positive() を足す
metadata: z.null()null しか通らないz.string().nullable()
status: z.string()どんな文字列も通るz.enum(["active", "inactive"])
サンプルにあったフィールドAPI が省略することがあっても必須になる.optional() を付ける

失敗したら処理を止めたい場所(起動時の設定読み込みなど)では .parse() を使います。ZodError を投げます。API レスポンスやユーザー入力には .safeParse() を使います。{ success: false, error } を返すので、エラーを自分で処理できます。

制限事項

  • 型は 1 つのサンプルから決まります。 空の配列は z.array(z.unknown())、空のオブジェクトは z.record(z.string(), z.unknown()) になります。
  • null は z.null() になります。 .nullable() は付きません。オブジェクトの配列で、あるキーが 1 件目で null、2 件目で文字列のときは z.union([z.null(), z.string()]) になります。
  • 型が混ざった配列は union になります。 [{"a": 1}, 2] のような配列は、ルートでもオブジェクトの中でも z.array(z.union([z.number().int(), z.object({ a: z.number().int() })])) になります。同じ配列のオブジェクトは 1 つの z.object にまとめるので、union のオブジェクトは 1 つです。
  • 文字列の形式や範囲は付きません。 メール、URL、日付、UUID はすべて z.string() です。

FAQ

Zodとは何ですか?

ZodはTypeScriptファーストのスキーマ宣言・バリデーションライブラリです。データの形状をスキーマで定義し、実行時にデータを検証できます。APIレスポンス検証・フォームバリデーション・設定ファイル解析に広く使われています。

型の推論はどう行われますか?

各JSON値を検査します:文字列→z.string()、真偽値→z.boolean()、整数→z.number().int()、浮動小数点→z.number()、null→z.null()、配列→z.array()、オブジェクト→z.object()。オブジェクトの配列では、一部のアイテムにしか存在しないキーはoptionalとしてマークされます。

ストリクトモードとは何ですか?

ストリクトモードを有効にすると、すべてのz.object()に.strict()が追加されます。スキーマに定義されていない余分なキーを含む入力オブジェクトはZodに拒否されます。無効時は余分なキーが無視されます(Zodのデフォルト動作)。

生成されたスキーマはそのまま使えますか?

生成スキーマは良い出発点です。文字列・数値への.min()/.max()制約追加、nullableフィールドの.nullable().optional()への変更、ネストスキーマの個別定数への分割など、プロジェクトに合わせて調整することをお勧めします。

JSONデータはサーバーに送信されますか?

いいえ。すべての処理はブラウザ内で完結します。JSONデータがデバイス外に出ることはありません。