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

如何为含同属性列表及固定元素的JSON定义JSON Schema?

JSON Schema 复用结构与固定数组定义方案

复用通用元素结构

利用JSON Schema的$defs关键字提取TYPE_S和TYPE_C元素的共同字段,实现代码复用:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "A": { "type": "string" },
    "B": { "type": "string" },
    "C": { "type": "string" },
    "TYPE_S": {
      "type": "array",
      "items": { "$ref": "#/$defs/CommonItem" },
      "minItems": 1 // 按需添加:限制TYPE_S至少有一个元素
    },
    "TYPE_C": {
      "const": [
        {
          "ID": "C1",
          "X": "x",
          "Y": "y",
          "Z": "z"
        },
        {
          "ID": "C2",
          "X": "x",
          "Y": "y",
          "Z": "z"
        }
      ],
      "items": { "$ref": "#/$defs/CommonItem" } // 可选:确保固定元素符合通用结构
    }
  },
  "required": ["A", "B", "C", "TYPE_S", "TYPE_C"],
  "$defs": {
    "CommonItem": {
      "type": "object",
      "properties": {
        "ID": { "type": "string" },
        "X": { "type": "string" },
        "Y": { "type": "string" },
        "Z": { "type": "string" }
      },
      "required": ["ID", "X", "Y", "Z"]
    }
  }
}

核心逻辑说明

  • 结构复用:通过$ref引用#/$defs/CommonItem,让TYPE_S的数组项和TYPE_C的固定元素共享同一套字段规则,后续修改通用字段只需调整$defs中的定义,无需重复修改多处。
  • TYPE_C固定值约束:使用const关键字强制TYPE_C必须完全匹配指定的数组内容,包括元素顺序、每个字段的取值,确保其始终固定不变。
  • 灵活调整约束:TYPE_S默认支持可变长度的数组,若需限制元素数量,可添加minItems/maxItems;required数组指定必须存在的顶级字段,可根据实际需求增减。

验证规则

  • TYPE_S:数组内每个元素符合CommonItem结构即可,元素数量可按需调整(若有minItems/maxItems则需满足对应限制)。
  • TYPE_C:必须严格匹配const定义的数组,任何字段值修改、元素顺序变更或数量变化都会导致验证失败。

内容的提问来源于stack exchange,提问作者P. Solar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:07:08