JSONからJSON Schema
JSON to JSON Schema
1つまたは複数の実例からJSON Schemaを推論し、見つかった形を合わせて1つにします。
例の文書をJSON Schema(2020-12)として記述します。型、properties、`required`、そして繰り返し現れる形のための入れ子の`$defs`が出ます。契約テストやOpenAPIのコンポーネントなど、例ではなくスキーマを求められる場所で使えます。
サンプルJSON
.json ファイルを置く
このタブの中で読みます。アップロードはしません。
手元にある要素を全部入れてください。レコードが一つ増えるたびに推論が絞り込まれます。どれか一つに無いフィールドこそが、省略可能である根拠です。
TypeScript
使い方
手元にあるレコードをできるだけ多く貼り付けます
配列は先頭の要素だけでなく、すべての要素を読んで合わせます。レコードが3件あれば1件のときよりはるかに多くのことが分かります。どれか1件に欠けているという事実こそが、そのフィールドを省略可能にする根拠だからです。
ルートの型に名前を付けます
入れ子のオブジェクトは、それを保持しているキーの名前を取ります。配列なら単数形になるので、`users`からは`User`ができます。自分で名前を決める必要があるのはルートだけです。
出力の下にある件数を読みます
型の数、省略可能なフィールドの数、ユニオンの数、そして合わせたレコードの数が出ます。ユニオンが0より大きければ、あるフィールドが標本の中で違う種類の値を持っていたということなので、結果をコードベースに貼り付ける前に一度見ておく価値があります。
スキーマを検証ツールに持っていきます
出力には`$schema`キーワードが入っているので、このサイトのJSON Schema検証ツールにも、ほかの2020-12実装にもそのまま入れられます。
よくある質問
どのdraftですか
`$schema`キーワードに書いてあるとおり2020-12です。使い回す形は`$defs`に入れて`$ref`で参照しますが、これはそのdraftの書き方です。Draft-07向けのツールは`definitions`を期待するので、この参照を解決できません。
型以外の制約が付かないのはなぜですか
`format`、`minLength`、`pattern`、`enum`は出しません。どれも数件のレコードから推測することになりますし、本番の正しいデータを拒否するスキーマは、単に緩いだけのスキーマよりも悪いものです。根拠を示せる制約だけを自分で足してください。
`additionalProperties`は設定されますか
開いたままにします。つまり追加のキーがあっても検証を通ります。閉じてしまうと、APIがあとから足すフィールドのたびに検証が失敗しますし、標本だけではその形が閉じたものかどうかは分かりません。
`required`はどう決まりますか
その形にまとめられたすべてのレコードに存在していたプロパティだけがrequiredになります。レコードを1件だけ入れれば全部がrequiredになり、5件入れたあたりからスキーマが意味のあることを言い始めます。
ここから渡せます
JSONからTypeScript型
JSON to TypeScript
JSONの実例からTypeScriptのインターフェースや型を推論し、省略可能なフィールドとユニオンをまとめます。
JSONからZodスキーマ
JSON to Zod Schema
JSONの実例からZodのスキーマを組み立て、nullable・optional・列挙を推論します。
JSON Schema検証
JSON Schema Validator
文書をJSON Schemaで検証し、通らなかった箇所をインスタンスのパスとともに挙げます。
JSONフォーマッター・検証
JSON Formatter & Validator
JSONを整形・圧縮して検証し、構文エラーがあれば行と列を正確に指し示します。
次の一手
このツールが出したものをそのまま受け取れる道具です。
JSON Schema検証
JSON Schema Validator
文書をJSON Schemaで検証し、通らなかった箇所をインスタンスのパスとともに挙げます。
JSONからTypeScript型
JSON to TypeScript
JSONの実例からTypeScriptのインターフェースや型を推論し、省略可能なフィールドとユニオンをまとめます。
JSONからZodスキーマ
JSON to Zod Schema
JSONの実例からZodのスキーマを組み立て、nullable・optional・列挙を推論します。
OpenAPIの点検
OpenAPI Linter
OpenAPI文書の抜けたレスポンス・使われていないスキーマ・どこも指していない参照など、コード生成器を壊す不備を点検します。
JSON⇄CSV変換
JSON ⇄ CSV
入れ子のJSONをドット記法の列名で平らに開くか、表からオブジェクトを組み直します。
JSON差分比較
JSON Diff
キーの順序を無視して2つのJSONを構造で比べ、追加・削除・変更されたパスを挙げます。