UTILS.
100% ブラウザ内で完結
🛡️

JSON から Zod スキーマへ

サンプルの JSON 値を貼り付けると Zod スキーマと推論された TypeScript 型を生成し、1 つの形で実行時の検証とコンパイル時の型付けの両方を行えます。

出力

このツールについて

JSON から Zod スキーマへのツールは、貼り付けた JSON サンプルをすぐに使える Zod スキーマと対応する TypeScript 型に変換します。Zod は TypeScript の主要なバリデーションライブラリであり、実際の API ペイロードに対して z.object のツリーを手書きするのは遅くミスも起きやすい作業です。このコンバーターは JSON.parse で JSON を解析し、値を再帰的にたどって慣用的な Zod を出力します。文字列は z.string()、整数は z.number().int()、その他の数値は z.number()、真偽値は z.boolean()、null は z.null()、ネストしたオブジェクトはそれぞれ名前付きの z.object({...}) スキーマになります。

すべてブラウザ内でローカルに実行されます。JSON はページ内で解析されアップロードされないため、機微なペイロードはお使いのデバイスから外に出ません。配列はすべての要素を深くマージして要素型を推論するため、キーがわずかに異なるオブジェクトの配列でも、一部の要素に欠けているキーが .optional() として記される 1 つのスキーマが生成されます。ISO-8601 の日時文字列は認識され z.string().datetime() として出力されます。有効な識別子ではないオブジェクトキーは安全にクォートされます。

出力は完全なモジュールです。各オブジェクトスキーマのエクスポートされた const(子は参照する親より前に定義されます)に続き、export type Root = z.infer<typeof Root> が出力されるため、コンパイル時の型が無料で手に入ります。ルート名のボックスでトップレベルスキーマの名前を変更でき、欠損キートグルで欠けているキーを .optional()(既定)または .nullable() として扱えます。結果はコピーするか .ts ファイルとしてダウンロードできます。

よくある質問

JSON の型は Zod にどうマッピングされますか?
string は z.string()、ISO 日時文字列は z.string().datetime()、整数は z.number().int()、その他の数値は z.number()、真偽値は z.boolean()、null は z.null()、配列は z.array(...)、オブジェクトは名前付きの z.object({...}) になります。空配列は z.array(z.unknown()) になります。
オプショナルまたは null 許容のフィールドはどう扱われますか?
配列の要素やマージされた兄弟にキーが欠けている場合、そのキーには .optional() が付きます。null として見られた値は z.null() になるか .nullable() が追加されます。欠損キートグルにより、一部のサンプルに存在しないキーに .optional()(既定)または .nullable() を出力できます。
TypeScript の型も得られますか?
はい。スキーマの後に export type Root = z.infer<typeof Root> が出力されるため、推論された静的型はスキーマそのものから導出されます。実行時の検証とコンパイル時の型の両方について、単一の情報源になります。
JSON はどこかにアップロードされますか?
いいえ。解析とコード生成はすべて JSON.parse と純粋な JavaScript を使ってブラウザ内で行われます。サーバーには何も送信されないため、プライベートな API レスポンスを安全に貼り付けられます。

その他のツール