配列の一意性制約 — uniqueItemsで重複を禁止
JSON Schemaの uniqueItems キーワードで配列内の重複要素を禁止する方法を解説します。
Array Constraints
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 30
},
"uniqueItems": true,
"minItems": 1,
"maxItems": 20
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": ["read", "write", "delete", "admin"]
},
"uniqueItems": true
},
"matrix": {
"type": "array",
"items": {
"type": "array",
"items": { "type": "integer" }
},
"uniqueItems": true
}
},
"required": ["tags"]
}Test Data
{
"tags": ["javascript", "typescript", "react", "nextjs"],
"permissions": ["read", "write"],
"matrix": [[1, 2], [3, 4], [5, 6]]
}詳細な説明
JSON Schemaの uniqueItems: true キーワードは、配列内の全要素がユニーク(一意)であることを要求します。重複する要素がある場合、バリデーションに失敗します。
比較のルール:
- プリミティブ値(文字列、数値、boolean、null)は値で比較されます。
- オブジェクトと配列は深い比較(deep equality)で判定されます。
1と1.0は同じ値として扱われます。
使用例:
{
"type": "array",
"items": { "type": "string" },
"uniqueItems": true
}
["red", "green", "blue"] は有効ですが、["red", "green", "red"] は無効です。
タグ、カテゴリ、選択肢リストなど、重複を許可すべきでないデータの検証に不可欠なキーワードです。パフォーマンスの観点では、大量の要素を持つ配列での uniqueItems チェックはコストが高くなる可能性があります。
ユースケース
タグリスト、ユーザーロールの配列、一意なIDリストなど、重複を禁止すべき配列データのバリデーションに使用します。