本文へスキップ

JSONからZodスキーマ

JSON to Zod Schema

JSONの実例からZodのスキーマを組み立て、nullable・optional・列挙を推論します。

例のJSON文書をZodのスキーマに変えます。TypeScriptの型では得られない実行時の検査がこちらです。出力は宣言順に並んだ`z.object`の定数と、ルートに対する推論型なので、一度貼り付ければパーサと型の両方が手に入ります。

🔒 ブラウザの中だけで動きますzodjsoncodegenvalidation
出力する形式

サンプルJSON

.json ファイルを置く

このタブの中で読みます。アップロードはしません。

手元にある要素を全部入れてください。レコードが一つ増えるたびに推論が絞り込まれます。どれか一つに無いフィールドこそが、省略可能である根拠です。

TypeScript

使い方

  1. 手元にあるレコードをできるだけ多く貼り付けます

    配列は先頭の要素だけでなく、すべての要素を読んで合わせます。レコードが3件あれば1件のときよりはるかに多くのことが分かります。どれか1件に欠けているという事実こそが、そのフィールドを省略可能にする根拠だからです。

  2. ルートの型に名前を付けます

    入れ子のオブジェクトは、それを保持しているキーの名前を取ります。配列なら単数形になるので、`users`からは`User`ができます。自分で名前を決める必要があるのはルートだけです。

  3. 出力の下にある件数を読みます

    型の数、省略可能なフィールドの数、ユニオンの数、そして合わせたレコードの数が出ます。ユニオンが0より大きければ、あるフィールドが標本の中で違う種類の値を持っていたということなので、結果をコードベースに貼り付ける前に一度見ておく価値があります。

  4. 貼り付けて、それでパースします

    ブロックは子が先になるように出力されます。Zodではこれが効いてきます。あとで宣言される定数を参照する`z.object`は、型チェックの失敗ではなくimportの時点で例外になるからです。出てきた順序はそのままにしてください。

よくある質問

スキーマがAPIの仕様と合わないのですが

仕様ではなく標本を説明しているからです。省略可能と付いたフィールドは、貼り付けたレコードのどれかに無かっただけです。必須と出たフィールドも、十分な数を見ていないAPIでは実際には省略可能かもしれません。手で締め直すための下書きとして扱ってください。

emailやuuid、最小長といった細かい制約は付きますか

一切付きません。すべて`z.string()`、`z.number()`、`z.boolean()`で、標本の数値がすべて整数だったときにだけ`.int()`が付きます。@が入っているからと`.email()`を付けるのは推測であり、間違った制約は本番で正しいデータを拒否します。

空の配列はどうなりますか

`z.array(z.unknown())`になります。空の配列は要素の型について何も語らないからです。配列が空でないレコードを1件貼り付ければ、そこが埋まります。

Zodのどのバージョン向けですか

出力する呼び出しは、Zod 3と4で同じものだけです。`z.object`、`z.array`、`z.union`、`.nullable()`、`.optional()`、そして引数2つの形の`z.record(z.string(), z.unknown())`です。バージョンに依存するAPIは使っていません。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。