json-模式,对象数组,唯一键值

json-schema, array of object, unique key-value

我有以下架构

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "choices": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          },
          "isCorrect": {
            "type": "boolean"
          }
        },
        "required": ["value", "isCorrect"],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 50,
      "uniqueItems": true,
      "additionalItems": false,
    }
  }
}

验证数据

{
  "choices": [
    {
      "value": "John",
      "isCorrect": true
    },
    {
      "value": "Doe",
      "isCorrect": true
    }
  ] 
}

但我希望 isCorrect 在对象数组中有一个 true(其他 false)。

是否可以验证单个密钥的唯一性?

您无法检查基于键的唯一性,但您可以结合使用 containsmaxContains 来获得您描述的约束。

properties.choices 对象中,添加以下...

      "contains": {
        "properties": {
          "isCorrect": {
            "const": true
          }
        }
      },
      "maxContains": 1,

您可以使用 https://json-schema.hyperjump.io

进行检查

contains 关键字确保数组包含至少一项根据子模式值有效。

maxContains 关键字,如果使用 contains 关键字,根据 contains 子模式值确保不超过有效项目数。

https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#section-6.4.4