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

如何创建含未知属性的JSON Schema并校验嵌套对象值类型

实现方法

直接在数组项对应的对象节点使用additionalProperties关键字即可,该关键字专门用于约束对象下未提前声明名称的动态属性格式,支持任意嵌套层级使用,没有场景限制。

首先先修正你原有Schema里的语法错误:原代码中"items: 缺失闭合双引号,属于语法问题,运行校验前需要先修复。

核心规则说明:

  • JSON Schema默认对象的属性名就是字符串类型,你不需要额外编写规则约束属性名的类型,除非需要对属性名的命名规则做正则匹配限制,可搭配propertyNames实现,当前场景不需要额外配置。
  • additionalProperties的取值就是你要求的每个动态属性值对应的Schema规则,所有不在properties中显式声明的属性,都会自动套用这个规则做校验。
  • 如果你要求每个动态属性必须同时包含value和ticker两个字段,不要漏写required配置,否则允许出现缺字段的对象。

完整可用Schema示例

{
  "Stocks": {
    "description": "some stock data",
    "type": "array",
    "items": {
      "type": "object",
      // 约束当前对象下所有任意名称的属性,均符合下方结构要求
      "additionalProperties": {
        "type": "object",
        "properties": {
          "value": {
            "type": "integer"
          },
          "ticker": {
            "type": "string"
          }
        },
        // 标记两个字段为必填,可根据实际业务需求决定是否保留
        "required": ["value", "ticker"]
      }
    }
  }
}

校验效果

  • 完全保留属性名灵活性:数组的每个元素对象下,可以出现任意数量、任意字符串名称的属性,不需要提前在Schema中枚举。
  • 强约束属性值格式:所有动态属性的值都会被校验,必须是对象结构,且包含整数类型的value字段、字符串类型的ticker字段,不符合规则的返回会直接判定校验不通过。
  • 兼容固定属性配置:如果后续你有几个固定名称的属性需要做差异化校验,直接把这些固定属性写在同层级的properties下即可,additionalProperties只会对未在properties中声明的属性生效,二者不会冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:45:42