はじめに
その他の例
このページでは、JSONスキーマを最大限に活用するのに役立つさまざまなユースケースを示すその他の例を紹介します。各例には、対応するJSONデータと説明が付いています。
- 典型的な最小スキーマ
- モノの配列
- 列挙値
- 正規表現パターン
- ネストされたプロパティを持つ複雑なオブジェクト
- dependentRequiredによる条件付き検証
- dependentSchemasによる条件付き検証
- if-elseによる条件付き検証
基本
この例では、JSONスキーマでよく見られる典型的な最小限の構成を示します。これには以下が含まれます。
$idキーワード$schemaキーワードtitle注釈キーワードtypeインスタンスデータモデルproperties検証キーワード- 3つのキー:
firstName、lastName、およびage、それぞれに独自のdescription注釈キーワード。typeインスタンスデータモデル(上記参照)。
minimumageキーの検証キーワード。
データ
このデータ例では、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 を学ぶことはしばしば混乱を招きますが、ご安心ください。私たちがお手伝いします!