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

JSON Schema编写:如何避免重复定义数组项公共必填属性

JSON Schema 公共属性复用优化方案

你可以利用 JSON Schema 约束默认逻辑与的特性,将所有数组项通用的属性定义、必填规则提取到anyOf的外层,分支内仅保留各场景特有的属性约束即可,完全无需重复定义公共字段。
另外你原写法中additionalProperties: false放在数组层级是无效配置,该属性仅对object类型生效,需要调整到数组项的object约束内。

优化后可直接使用的Schema如下:

{
    "$schema": "https://json-schema.org/draft/2019-09/schema",
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": ["name"],
      "anyOf": [
        {},
        { 
          "properties": {
            "version": {
              "type": "number"
            }
          }
        },
        { 
          "properties": {
            "weight": {
              "type": "number"
            }
          }
        }
      ],
      "additionalProperties": false
    }
}

逻辑说明

  • 外层的properties与required是所有数组项都必须满足的公共约束:强制存在name字段且类型为字符串
  • anyOf三个分支分别对应允许的三种结构:
    • 空对象分支:仅保留必填的name字段,无额外属性
    • 第二个分支:允许额外携带version数字字段
    • 第三个分支:允许额外携带weight数字字段
  • 如果你后续需要新增其他公共属性,仅需要在外层properties中添加一次即可,不需要修改anyOf内的分支逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:05