You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON Schema如何校验choices数组中isCorrect字段仅存在一个true值

实现方案

可以实现该校验规则,针对你当前使用的JSON Schema 2020-12草案,使用contains+minContains+maxContains的组合即可完成需求。

规则逻辑说明

  • contains关键字:指定数组中需要匹配的项规则,这里要求匹配isCorrect值为true的对象
  • minContains: 1:要求数组中至少有1个匹配contains规则的项
  • maxContains: 1:要求数组中最多有1个匹配contains规则的项
    三者组合就刚好实现「有且仅有一个isCorrect为true」的校验要求。

修改后的完整Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["choices"],
  "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,
      "contains": {
        "properties": {
          "isCorrect": {
            "const": true
          }
        },
        "required": ["isCorrect"]
      },
      "minContains": 1,
      "maxContains": 1
    }
  }
}

兼容旧草案的实现方案(可选)

如果你需要兼容draft-07及更早不支持minContains/maxContains的草案版本,可以用逻辑组合实现相同效果:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["choices"],
  "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,
      "allOf": [
        {"contains": {"properties": {"isCorrect": {"const": true}}}},
        {
          "not": {
            "items": {
              "contains": {"properties": {"isCorrect": {"const": true}}},
              "minItems": 2
            }
          }
        }
      ]
    }
  }
}

校验效果

  • 当choices数组中没有isCorrect: true的项:校验不通过
  • 当choices数组中有2个及以上isCorrect: true的项:校验不通过
  • 当choices数组中恰好有1个isCorrect: true的项:校验通过

内容的提问来源于stack exchange,提问作者Anuj TBE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:18:03