配列の一意性制約 — 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)で判定されます。
  • 11.0 は同じ値として扱われます。

使用例:

{
  "type": "array",
  "items": { "type": "string" },
  "uniqueItems": true
}

["red", "green", "blue"] は有効ですが、["red", "green", "red"] は無効です。

タグ、カテゴリ、選択肢リストなど、重複を許可すべきでないデータの検証に不可欠なキーワードです。パフォーマンスの観点では、大量の要素を持つ配列での uniqueItems チェックはコストが高くなる可能性があります。

ユースケース

タグリスト、ユーザーロールの配列、一意なIDリストなど、重複を禁止すべき配列データのバリデーションに使用します。

試してみる — JSON Schema Validator

フルツールを開く