はじめに
その他の例
このページでは、JSONスキーマを最大限に活用するのに役立つさまざまなユースケースを示すその他の例を紹介します。各例には、対応するJSONデータと説明が付いています。
- 典型的な最小スキーマ
- モノの配列
- 列挙値
- 正規表現パターン
- ネストされたプロパティを持つ複雑なオブジェクト
- dependentRequiredによる条件付き検証
- dependentSchemasによる条件付き検証
- if-elseによる条件付き検証
基本
この例では、JSONスキーマでよく見られる典型的な最小限の構成を示します。これには以下が含まれます。
$id
キーワード$schema
キーワードtitle
注釈キーワードtype
インスタンスデータモデルproperties
検証キーワード- 3つのキー:
firstName
、lastName
、およびage
、それぞれに独自のdescription
注釈キーワード。type
インスタンスデータモデル(上記参照)。
minimum
age
キーの検証キーワード。
データ
このデータ例では、firstName
、lastName
、age
プロパティの値を提供しています。これらの値は、定義されたスキーマに一致しており、firstName
は文字列、lastName
は文字列、age
はゼロ以上の整数です。
モノの配列
配列はJSONの基本的な構造です。ここでは、配列を記述するいくつかの方法を示します。
- 文字列値の配列。
- オブジェクトの配列。
この例では、以下も紹介します。
fruits
プロパティについて
type
は、それが配列であることを示すために "array" に設定されています。items
は、配列内の項目を記述します。この場合、それらは "string" 型である必要があります。
vegetables
プロパティについて
type
も、それが配列であることを示すために "array" に設定されています。items
は、$defs/veggie
定義を参照しており、配列内の項目が$defs
セクションで定義された "veggie" スキーマに準拠する必要があることを示しています。
データ
このデータ例は、配列の使用法を示しています。fruits
プロパティは文字列の配列を含み、一方、vegetables
プロパティはオブジェクトの配列を含み、各オブジェクトは "veggie" スキーマ定義に準拠しています。
列挙値
この例では、整数(42
)、ブール値(true
)、文字列("hello"
)、null
、配列([1, 2, 3]
)を含む値の配列で使用されるenum
検証キーワードを紹介します。これは、enum
を使用して異なる型の許可された値のセットを指定する方法を示しています。
データ
提供されたデータは、enum配列で指定された正確な値:[1, 2, 3]
を使用することにより、スキーマに準拠しています。
正規表現パターン
この例では、patternキーワードを紹介し、特定の正規表現パターン:^[A-Z]{3}-\d{3}$
に一致する必要があるcode
というプロパティを持つオブジェクトを定義します。ここでのパターンは、3つの大文字の後にハイフンと3つの数字が必要であることを意味します。
データ
提供されたデータ "ABC-123" は、このスキーマで定義されたパターンを満たしています。
ネストされたプロパティを持つ複雑なオブジェクト
以下のスキーマは、name
、age
、address
、および hobbies
を含むさまざまなプロパティを持つ複合オブジェクトを表しています。address
プロパティはネストされたプロパティを持つオブジェクトであり、hobbies
プロパティは文字列の配列です。name
および age
プロパティは必須です。
データ
提供されたデータは、必須プロパティの値を含み、age
が0以上の整数であることを保証することにより、スキーマに準拠しています。address
オブジェクトは必要なすべてのプロパティを含み、hobbies
プロパティは文字列の配列です。
dependentRequiredによる条件付き検証
この例では、dependentRequired
キーワードを使用して、プロパティfoo
が存在する場合、プロパティbar
が必須であることを指定します。スキーマは、foo
が存在する場合、bar
も存在しなければならないという条件を強制します。
データ
スキーマによれば、foo
プロパティが存在する場合(true
)、bar
プロパティが必須になります。bar
プロパティには "Hello World" という値が与えられ、文字列であるという要件を満たし、dependentRequired
条件への準拠が保証されます。
foo
と bar
の両方が欠落しているため、インスタンスは依然として有効であり、dependentRequired
条件にも準拠しています。
上記のスキーマは無効です。foo
プロパティは存在しますが、bar
が存在しないため、dependentRequired
キーワードの条件が無効になります。
dependentSchemasによる条件付き検証
提示されたスキーマは、dependentSchemas
キーワードの使用を示しています。これにより、特定のプロパティが存在する場合に満たす必要のあるサブスキーマを定義できます。
- この例では、スキーマは
foo
とpropertiesCount
の 2 つのプロパティを持つオブジェクトを定義しています。foo
プロパティはブール型であり、propertiesCount
プロパティは最小値が 0 の整数型です。 - サブスキーマによると、
foo
プロパティが存在する場合、propertiesCount
プロパティが必須になり、最小値が 7 の整数である必要があります。
データ
ここで、foo
プロパティは true に設定されており、その存在を示しています。スキーマに従い、foo
が存在する場合、propertiesCount
プロパティが必須になります。この場合、propertiesCount
プロパティには 10 の値が指定されており、整数であり、最小値が 7 であるという要件を満たしています。
上記データでは、propertiesCount
は 5 ですが、foo
が欠落しているため、propertiesCount
は 7 以上である必要はなく、0 以上であるだけで済みます。したがって、このインスタンスは有効です。
ここでは、foo
は true ですが、propertiesCount
は 5 です。スキーマでは、propertiesCount
は dependentSchemas
によると、入力として最小値が 7 に設定されています。したがって、これは無効なインスタンスです。
if-elseによる条件付き検証
このスキーマには、isMember
と membershipNumber
の 2 つのプロパティがあります。条件付き検証は、isMember
プロパティの値に基づいています。検証キーワードは、if、then、else です。
この例での検証の仕組みは次のとおりです。
isMember
の値が true の場合
then
ブロックが適用され、membershipNumber
プロパティが最小長が 10、最大長が 10 の文字列である必要があることを指定します。
isMember
の値が true 以外の場合
else
ブロックが適用され、membershipNumber
プロパティが任意の文字列でよいことを指定します。
データ
この場合、isMember
プロパティは true に設定されているため、then ブロックが適用されます。membershipNumber
プロパティは、長さが 10 文字の文字列であり、検証を満たしています。
この場合、isMember
プロパティは false なので、else ブロックが適用されます。membershipNumber
プロパティは、最小長が 15 以上の任意の文字列にできるため、検証を満たしています。
ヘルプが必要ですか?
これらのドキュメントはお役に立ちましたか?
まだヘルプが必要ですか?
JSON Schema を学ぶことはしばしば混乱を招きますが、ご安心ください。私たちがお手伝いします!