はじめに

その他の例

このページでは、JSONスキーマを最大限に活用するのに役立つさまざまなユースケースを示すその他の例を紹介します。各例には、対応するJSONデータと説明が付いています。

基本

この例では、JSONスキーマでよく見られる典型的な最小限の構成を示します。これには以下が含まれます。

  • $id キーワード
  • $schema キーワード
  • title 注釈キーワード
  • type インスタンスデータモデル
  • properties 検証キーワード
  • 3つのキー:firstNamelastName、およびage、それぞれに独自の
    • description 注釈キーワード。
    • type インスタンスデータモデル(上記参照)。
  • minimum age キーの検証キーワード。
スキーマ
{ "$id": "https://example.com/person.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "Person", "type": "object", "properties": { "firstName": { "type": "string", "description": "The person's first name." }, "lastName": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years which must be equal to or greater than zero.", "type": "integer", "minimum": 0 } }}

データ

データ
{ "firstName": "John", "lastName": "Doe", "age": 21}

このデータ例では、firstNamelastNameage プロパティの値を提供しています。これらの値は、定義されたスキーマに一致しており、firstName は文字列、lastName は文字列、age はゼロ以上の整数です。

モノの配列

配列はJSONの基本的な構造です。ここでは、配列を記述するいくつかの方法を示します。

  • 文字列値の配列。
  • オブジェクトの配列。

この例では、以下も紹介します。

fruits プロパティについて

  • type は、それが配列であることを示すために "array" に設定されています。
  • items は、配列内の項目を記述します。この場合、それらは "string" 型である必要があります。

vegetables プロパティについて

  • type も、それが配列であることを示すために "array" に設定されています。
  • items は、$defs/veggie 定義を参照しており、配列内の項目が $defs セクションで定義された "veggie" スキーマに準拠する必要があることを示しています。
スキーマ
{ "$id": "https://example.com/arrays.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "description": "Arrays of strings and objects", "title": "Arrays", "type": "object", "properties": { "fruits": { "type": "array", "items": { "type": "string" } }, "vegetables": { "type": "array", "items": { "$ref": "#/$defs/veggie" } } }, "$defs": { "veggie": { "type": "object", "required": [ "veggieName", "veggieLike" ], "properties": { "veggieName": { "type": "string", "description": "The name of the vegetable." }, "veggieLike": { "type": "boolean", "description": "Do I like this vegetable?" } } } }}

データ

データ
{ "fruits": [ "apple", "orange", "pear" ], "vegetables": [ { "veggieName": "potato", "veggieLike": true }, { "veggieName": "broccoli", "veggieLike": false } ]}

このデータ例は、配列の使用法を示しています。fruits プロパティは文字列の配列を含み、一方、vegetables プロパティはオブジェクトの配列を含み、各オブジェクトは "veggie" スキーマ定義に準拠しています。

列挙値

この例では、整数(42)、ブール値(true)、文字列("hello")、null、配列([1, 2, 3])を含む値の配列で使用されるenum検証キーワードを紹介します。これは、enumを使用して異なる型の許可された値のセットを指定する方法を示しています。

スキーマ
{ "$id": "https://example.com/enumerated-values.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "列挙された値", "type": "object", "properties": { "data": { "enum": [42, true, "hello", null, [1, 2, 3]] } }}

データ

データ
{ "data": [1, 2, 3]}

提供されたデータは、enum配列で指定された正確な値:[1, 2, 3]を使用することにより、スキーマに準拠しています。

正規表現パターン

この例では、patternキーワードを紹介し、特定の正規表現パターン:^[A-Z]{3}-\d{3}$に一致する必要があるcodeというプロパティを持つオブジェクトを定義します。ここでのパターンは、3つの大文字の後にハイフンと3つの数字が必要であることを意味します。

スキーマ
{ "$id": "https://example.com/regex-pattern.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "正規表現パターン", "type": "object", "properties": { "code": { "type": "string", "pattern": "^[A-Z]{3}-\\d{3}$" } }}

データ

データ
{ "code": "ABC-123"}

提供されたデータ "ABC-123" は、このスキーマで定義されたパターンを満たしています。

ネストされたプロパティを持つ複雑なオブジェクト

以下のスキーマは、nameageaddress、および hobbies を含むさまざまなプロパティを持つ複合オブジェクトを表しています。address プロパティはネストされたプロパティを持つオブジェクトであり、hobbies プロパティは文字列の配列です。name および age プロパティは必須です。

スキーマ
{ "$id": "https://example.com/complex-object.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "Complex Object", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 }, "address": { "type": "object", "properties": { "street": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" }, "postalCode": { "type": "string", "pattern": "\\d{5}" } }, "required": ["street", "city", "state", "postalCode"] }, "hobbies": { "type": "array", "items": { "type": "string" } } }, "required": ["name", "age"]}

データ

データ
{ "name": "John Doe", "age": 25, "address": { "street": "123 Main St", "city": "New York", "state": "NY", "postalCode": "10001" }, "hobbies": ["reading", "running"]}

提供されたデータは、必須プロパティの値を含み、age が0以上の整数であることを保証することにより、スキーマに準拠しています。addressオブジェクトは必要なすべてのプロパティを含み、hobbiesプロパティは文字列の配列です。

dependentRequiredによる条件付き検証

この例では、dependentRequiredキーワードを使用して、プロパティfooが存在する場合、プロパティbarが必須であることを指定します。スキーマは、fooが存在する場合、barも存在しなければならないという条件を強制します。

スキーマ
{ "$id": "https://example.com/conditional-validation-dependentRequired.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "dependentRequiredを使用した条件付き検証", "type": "object", "properties": { "foo": { "type": "boolean" }

データ

データ
{ "foo": true, "bar": "Hello World"}

スキーマによれば、foo プロパティが存在する場合(true)、bar プロパティが必須になります。bar プロパティには "Hello World" という値が与えられ、文字列であるという要件を満たし、dependentRequired 条件への準拠が保証されます。

データ
{}

foobar の両方が欠落しているため、インスタンスは依然として有効であり、dependentRequired 条件にも準拠しています。

データ
{ "foo": true}

上記のスキーマは無効です。foo プロパティは存在しますが、bar が存在しないため、dependentRequired キーワードの条件が無効になります。

dependentSchemasによる条件付き検証

提示されたスキーマは、dependentSchemas キーワードの使用を示しています。これにより、特定のプロパティが存在する場合に満たす必要のあるサブスキーマを定義できます。

  • この例では、スキーマは foopropertiesCount の 2 つのプロパティを持つオブジェクトを定義しています。foo プロパティはブール型であり、propertiesCount プロパティは最小値が 0 の整数型です。
  • サブスキーマによると、foo プロパティが存在する場合、propertiesCount プロパティが必須になり、最小値が 7 の整数である必要があります。
スキーマ
{ "$id": "https://example.com/conditional-validation-dependentSchemas.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "Conditional Validation with dependentSchemas", "type": "object", "properties": { "foo": { "type": "boolean" }, "propertiesCount": { "type": "integer", "minimum": 0 } }, "dependentSchemas": { "foo": { "required": ["propertiesCount"], "properties": { "propertiesCount": { "minimum": 7 } } } }}

データ

データ
{ "foo": true, "propertiesCount": 10}

ここで、foo プロパティは true に設定されており、その存在を示しています。スキーマに従い、foo が存在する場合、propertiesCount プロパティが必須になります。この場合、propertiesCount プロパティには 10 の値が指定されており、整数であり、最小値が 7 であるという要件を満たしています。

データ
{ "propertiesCount": 5}

上記データでは、propertiesCount は 5 ですが、foo が欠落しているため、propertiesCount は 7 以上である必要はなく、0 以上であるだけで済みます。したがって、このインスタンスは有効です。

データ
{ "foo": true, "propertiesCount": 5}

ここでは、foo は true ですが、propertiesCount は 5 です。スキーマでは、propertiesCountdependentSchemas によると、入力として最小値が 7 に設定されています。したがって、これは無効なインスタンスです。

if-elseによる条件付き検証

このスキーマには、isMembermembershipNumber の 2 つのプロパティがあります。条件付き検証は、isMember プロパティの値に基づいています。検証キーワードは、ifthenelse です。

この例での検証の仕組みは次のとおりです。

isMember の値が true の場合

  • then ブロックが適用され、membershipNumber プロパティが最小長が 10、最大長が 10 の文字列である必要があることを指定します。

isMember の値が true 以外の場合

  • else ブロックが適用され、membershipNumber プロパティが任意の文字列でよいことを指定します。
スキーマ
{ "$id": "https://example.com/conditional-validation-if-else.schema.json", "$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema", "title": "Conditional Validation with If-Else", "type": "object", "properties": { "isMember": { "type": "boolean" }, "membershipNumber": { "type": "string" } }, "required": ["isMember"], "if": { "properties": { "isMember": { "const": true } } }, "then": { "properties": { "membershipNumber": { "type": "string", "minLength": 10, "maxLength": 10 } } }, "else": { "properties": { "membershipNumber": { "type": "string", "minLength": 15 } } }}

データ

データ
{ "isMember": true, "membershipNumber": "1234567890"}

この場合、isMember プロパティは true に設定されているため、then ブロックが適用されます。membershipNumber プロパティは、長さが 10 文字の文字列であり、検証を満たしています。

データ
{ "isMember": false, "membershipNumber": "GUEST1234567890"}

この場合、isMember プロパティは false なので、else ブロックが適用されます。membershipNumber プロパティは、最小長が 15 以上の任意の文字列にできるため、検証を満たしています。

ヘルプが必要ですか?

これらのドキュメントはお役に立ちましたか?

ドキュメントを改善するためにご協力ください!

JSON Schema では、他のあらゆる種類の貢献と同様に、ドキュメントの貢献を重視しています!

まだヘルプが必要ですか?

JSON Schema を学ぶことはしばしば混乱を招きますが、ご安心ください。私たちがお手伝いします!