リファレンス

文字列

string型は、テキスト文字列に使用されます。Unicode文字を含めることができます。

言語固有の情報:
Python
Ruby
Objective-C
Swift
Pythonでは、"string" はPythonのunicode型に相当します
スキーマ
{ "type": "string" }
データ
"Déjà vu"
スキーマに準拠
データ
""
スキーマに準拠
データ
"42"
スキーマに準拠
データ
42
スキーマに準拠していません

長さ

文字列の長さは、minLengthキーワードとmaxLengthキーワードを使用して制限できます。どちらのキーワードも、値は負でない数値である必要があります。

スキーマ
{ "type": "string", "minLength": 2, "maxLength": 3}
データ
"A"
スキーマに準拠していません
データ
"AB"
スキーマに準拠
データ
"ABC"
スキーマに準拠
データ
"ABCD"
スキーマに準拠していません

正規表現

pattern キーワードは、文字列を特定の正規表現に制限するために使用されます。正規表現の構文は、Unicode をサポートした JavaScript (具体的には ECMA 262)で定義されているものです。詳細については、正規表現 を参照してください。

正規表現を定義する際には、式が文字列内のどこかに一致すれば、その文字列は有効と見なされることに注意することが重要です。たとえば、正規表現 "p" は、単に "p" である文字列だけでなく、"apple" のように p を含む任意の文字列に一致します。したがって、正当な理由がない限り、正規表現を ^...$ で囲む、たとえば "^p$" とするのが、通常は混乱が少ないです。

次の例は、市外局番がオプションの単純な北米の電話番号に一致します。

スキーマ
{ "type": "string", "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"}
データ
"555-1212"
スキーマに準拠
データ
"(888)555-1212"
スキーマに準拠
データ
"(888)555-1212 ext. 532"
スキーマに準拠していません
データ
"(800)FLOWERS"
スキーマに準拠していません

フォーマット

format キーワードを使用すると、一般的に使用される特定の種類の文字列値を基本的な意味で識別できます。たとえば、JSON には "DateTime" 型がないため、日付は文字列としてエンコードする必要があります。 format を使用すると、スキーマの作成者は、文字列値を日付として解釈する必要があることを示すことができます。デフォルトでは、format は単なるアノテーションであり、検証には影響しません。

オプションで、バリデーターの実装は、format が単なるアノテーションではなくアサーションとして機能するように設定オプションを提供できます。これは、たとえば、date フォーマットの値が日付として解析できる形式でない場合、検証が失敗することを意味します。これにより、正規表現 を含む JSON スキーマの他のツールではできないことを超えて、値を制約することができます。

実装では、組み込みフォーマットのサブセットのみの検証、または特定のフォーマットの部分的な検証を行う場合があります。たとえば、@ が含まれている場合、文字列をメールと見なす実装もあれば、整形式のメールアドレスの他の側面についても追加チェックを行う実装もあります。

JSON スキーマ仕様では、おそらく Web 技術の伝統から、ネットワーク関連のフォーマットに偏っています。ただし、JSON ドキュメントを交換する当事者間でカスタムフォーマットタイプに関する情報も交換される限り、カスタムフォーマットも使用できます。JSON スキーマバリデーターは、理解できないフォーマットタイプはすべて無視します。

組み込みフォーマット

JSON スキーマ仕様で指定されているフォーマットのリストを以下に示します。

日付と時刻

日付と時刻は、RFC 3339 のセクション 5.6 で表されます。これは、ISO8601 フォーマット としても一般的に知られている日付フォーマットのサブセットです。

  • "date-time":日付と時刻の組み合わせ。たとえば、2018-11-13T20:20:39+00:00 です。
  • "time":
    ドラフト 7 の新機能
    時刻。たとえば、20:20:39+00:00 です。
  • "date":
    ドラフト 7 の新機能
    日付。たとえば、2018-11-13 です。
  • "duration":
    ドラフト 2019-09 の新機能
    「duration」の ISO 8601 ABNF で定義されている期間。たとえば、P3D は 3 日間の期間を表します。

メールアドレス

  • "email":インターネットメールアドレス。 RFC 5321 のセクション 4.1.2 を参照してください。
  • "idn-email":
    ドラフト 7 の新機能
    国際化された形式のインターネットメールアドレス。 RFC 6531 を参照してください。

ホスト名

IPアドレス

リソース識別子

  • "uuid":
    ドラフト 2019-09 の新機能
    RFC 4122 で定義されている汎用一意識別子(UUID)。例:3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a
  • "uri"RFC3986 に準拠した Uniform Resource Identifier(URI)。
  • "uri-reference":
    ドラフト6の新機能
    RFC3986 セクション 4.1 に準拠した URI 参照(URI または相対参照)。
  • "iri":
    ドラフト 7 の新機能
    RFC3987 に準拠した、"uri" の国際化対応版。
  • "iri-reference":
    ドラフト 7 の新機能
    RFC3987 に準拠した、"uri-reference" の国際化対応版。

スキーマ内の値が特定のソースパス(ウェブページからのリンクなど)に対して相対的な値をとることができる場合、一般的には "uri" (または "iri")ではなく、"uri-reference" (または "iri-reference")を使用することをお勧めします。"uri" は、パスが絶対パスでなければならない場合にのみ使用してください。

URI テンプレート

  • "uri-template":
    ドラフト6の新機能
    RFC6570 に準拠した URI テンプレート(任意のレベル)。URI テンプレートが何かをご存じない場合は、おそらくこの値は必要ありません。

JSON ポインター

  • "json-pointer":
    ドラフト6の新機能
    RFC6901 に準拠した JSON ポインター。JSON Schema 内での JSON ポインターの使用に関する詳細は、複雑なスキーマの構築 を参照してください。文字列全体に JSON ポインターの内容のみが含まれている場合(例:/foo/bar)にのみ使用してください。JSON ポインター URI フラグメント(例:#/foo/bar/)は、"uri-reference" を使用してください。
  • "relative-json-pointer":
    ドラフト 7 の新機能
    相対 JSON ポインター

正規表現

  • "regex":
    ドラフト 7 の新機能
    ECMA 262 dialect に準拠した正規表現。

注意:実際には、JSON スキーマバリデーターは、このドキュメントの別の場所で説明されている正規表現の安全なサブセットのみを受け入れる必要があります。

ヘルプが必要ですか?

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

ドキュメントの改善にご協力ください!

JSON Schema では、ドキュメントへの貢献は他のあらゆる種類の貢献と同じくらい重要です!

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

JSON Schema の学習は難しい場合がありますが、ご心配なく、お手伝いします!