新着記事を見逃さないには?
このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。
object・文字列・配列・enum・anyOf・$ref など JSON Schema のコピペ例と検証のつまずきポイント。JSON Work のローカル検証ツールと併用しやすい実務ガイドです。
JSON Schema は JSON データの 許容される形とルール を記述します。構文チェックは「JSON として正しいか」、スキーマ検証は「契約どおりのデータか」を見ます。
例は Draft 2020-12($schema)に沿っています。利用するバリデータが対応するドラフトに合わせてください。
JSON 自体の復習は JSON とは? を参照してください。
name(文字列)と age(整数)を必須、tags は任意:{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/person.min.json",
"title": "Person",
"type": "object",
"additionalProperties": false,
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0 },
"tags": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "age"]
}有効なインスタンス{ "name": "Asha", "age": 30, "tags": ["beta"] }無効な例(age がなく、additionalProperties: false により extra は不可){ "name": "Asha", "extra": true }{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"handle": { "type": "string", "pattern": "^[a-z0-9_]{3,20}$" },
"contact": { "type": "string", "format": "email" },
"createdAt": { "type": "string", "format": "date-time" }
},
"required": ["handle"]
}メモ: format はコア仕様では注釈扱いのことが多く、Ajv などではプラグインで有効化します。ランタイムでオンにしない限り、ドキュメントとして扱うのが安全です。{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"qty": { "type": "integer", "minimum": 1, "maximum": 99 },
"price": { "type": "number", "minimum": 0, "multipleOf": 0.01 }
},
"required": ["qty", "price"]
}整数には integer、小数や科学的表記には number を使い分けます。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"role": { "type": "string", "enum": ["admin", "editor", "viewer"] },
"version": { "const": 1 }
},
"required": ["role", "version"]
}{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"ids": {
"type": "array",
"items": { "type": "string", "pattern": "^[A-Z]{3}-[0-9]{4}$" },
"minItems": 1,
"maxItems": 10,
"uniqueItems": true
}
},
"required": ["ids"]
}{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"anyOf": [
{ "type": "string", "minLength": 1 },
{ "type": "number" }
]
}
},
"required": ["value"]
}oneOf — ちょうど 1 枝(重なる条件に注意)。allOf — すべての部分スキーマの制約を合成。{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"Email": { "type": "string", "format": "email" }
},
"type": "object",
"additionalProperties": false,
"properties": {
"owner": { "$ref": "#/$defs/Email" },
"billing": { "$ref": "#/$defs/Email" }
},
"required": ["owner"]
}ルートで additionalProperties: false にすると、naem のようなタイポを検出しやすくなります。公開 API では properties と required とセットで使うのが一般的です。
{ "type": ["string", "null"] } などを使う。integer に合わない)。本番パイプラインでは Ajv や jsonschema など、ドラフト対応を確認したライブラリ利用が一般的です。
開発者に最高のJSON処理ツールを提供することに専念
さらに多くの投稿が近日公開予定...
ブログに戻る更新の追い方、扱うトピック、リクエストについて。
このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。
JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。
はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。