Tool Kumarのツール
JSON Schema生成
代表的なJSONドキュメントから、JSON Schemaのたたき台を作成します。結果はサンプルの構造を記述したもので、バリデーションの出発点になります。
このツールの使い方
- サンプルのドキュメントを貼り付けます。
- 「変換」ビューで「JSON Schema」を選びます。
- 推論されたプロパティを確認し、スキーマを保存します。
実行例
このスキーマは、ネストしたprofileやtagsも含めて、サンプルのオブジェクトから生成したものです。このオブジェクトにはすべてのプロパティが含まれているため、すべてのプロパティがrequiredになります。
入力
{"name":"Ada","age":36,"active":true,"tags":["json","tools"],"profile":{"city":"London"}}出力
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Root",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
},
"active": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"profile": {
"$ref": "#/$defs/Profile"
}
},
"required": ["name", "age", "active", "tags", "profile"],
"$defs": {
"Profile": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": ["city"]
}
}
}
requiredのプロパティが決まる仕組み
複数のレコードからスキーマを生成すると、requiredの一覧には、すべてのレコードに存在するキーだけが残ります。このサンプルでは、2人のユーザーはどちらもidとemailを持っていますが、phoneを持つのは最初のユーザーだけです。そのため、phoneはスキーマに記述されますが、requiredには含まれません。
Input:
[{"id":1,"email":"ada@example.com","phone":"+44 20 7946 0000"},{"id":2,"email":"lin@example.com"}]
Generated schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Root",
"type": "array",
"items": {
"$ref": "#/$defs/RootItem"
},
"$defs": {
"RootItem": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"email": {
"type": "string",
"format": "email"
},
"phone": {
"type": "string"
}
},
"required": ["id", "email"]
}
}
}オプションと注意点
- ネストしたオブジェクトや配列は、再帰的に記述されます。
- プロパティは、その位置にあるサンプルのオブジェクトすべてに存在する場合にrequiredへ含まれます。そのため、完全なサンプルが1つあれば、確認されたすべてのプロパティがrequiredになります。オブジェクトの配列では、一部のオブジェクトにないキーは省略可能になります。
- 一部のオブジェクトでnullになっている値は、プロパティを省略可能にするのではなく、プロパティの型にnullを追加します。
- 出力はあくまでたたき台です。requiredを見直し、format、値の範囲、パターンを追加し、API仕様で保証していない内容は削除してください。
- このページはスキーマを生成するもので、ドキュメントをスキーマに照らして検証する機能はありません。生成の前に、「JSON構文チェック」ページでJSONの構文を確認できます。
標準でプライバシーを保護
ドキュメントはこのブラウザー内に残ります。Tool Kumarは、解析、変換、ダウンロードファイルの作成を端末内で行います。アカウント登録やアップロードの手順はありません。
JSON Schema生成のよくある質問
- すべてのプロパティが必須(required)になりますか?
- サンプルのオブジェクトすべてに存在するプロパティだけが必須になります。完全なサンプルが1つなら、そのすべてのプロパティがrequiredになります。一方、配列内の一部のオブジェクトにないキーは省略可能になります。スキーマを公開する前に、requiredの一覧をAPI仕様と照らして見直してください。
- どのドラフトを使っていますか?
- 出力はJSON Schema Draft 2020-12を宣言し、標準のtypeとpropertiesキーワードを使います。
- 配列の要素の構造も推論できますか?
- はい。オブジェクトの配列からは、サンプル内のオブジェクトの構造に基づいてitemsスキーマが生成されます。