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

适配JSON Schema Draft 2020-12的枚举架构修改方案咨询

解决方法

问题根源

你的Schema虽然声明遵循Draft 2020-12规范,但使用了旧版(Draft 7及之前)的tuple定义方式,同时正则表达式的逻辑存在小问题,导致严格遵循规范的Jsonschema.net校验不通过:

  1. Draft 2020-12已废弃用items数组定义tuple结构的写法,改用prefixItems关键字。
  2. 原正则表达式允许键名以点开头(^.[^."]*$中的.匹配任意字符),不符合常规命名逻辑,且转义写法易混淆。

修改后的Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Module",
  "description": "Schema for module definitions",
  "type": "object",
  "properties": {
    "enums": {
      "type": "object",
      "patternProperties": {
        "^[^.\"]+$": {
          "$ref": "#/$defs/KeyValuePairArray"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false,
  "$defs": {
    "KeyValuePairArray": {
      "type": "array",
      "items": {
        "type": "array",
        "prefixItems": [
          { "type": "string" },
          { "type": "integer" }
        ],
        "minItems": 2,
        "maxItems": 2
      }
    }
  }
}

修改说明

  1. 替换tuple定义方式:将原items数组改为prefixItems,这是Draft 2020-12中定义tuple结构的标准写法,明确指定数组第一个元素为字符串、第二个为整数。
  2. 修正正则表达式:将^.[^."]*$改为^[^.\"]+$,确保:
    • 键名至少包含一个字符(+表示匹配一次或多次)
    • 键名不包含点(.)和双引号(")
  3. 重命名$defs中的schema:将原enum改为KeyValuePairArray,避免与JSON Schema的内置enum关键字混淆,提升可读性。

示例JSON无需修改

你提供的示例JSON完全符合修改后的Schema要求,直接使用即可通过Jsonschema.net的校验:

{
  "enums": {
    "Drive Types": [["DOL", 1], ["VSD", 2], ["Servo", 3]],
    "Conveyor State": [["Off", 0], ["Faulted", 1], ["Idle", 2]]
  }
}

内容的提问来源于stack exchange,提问作者Cliff Pennalligen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:05:18