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

如何编写JSON Schema验证Foo对象?属性需为枚举或Foo实例

编写支持嵌套Foo对象与枚举值的JSON Schema

没问题,我来帮你搞定这个需求!你要的是一个递归结构的JSON Schema,允许Foo对象包含任意数量的属性,每个属性值要么是指定的枚举值(比如A或B),要么是另一个Foo实例。

完整的JSON Schema示例

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "enum": ["A", "B"]
      },
      { "$ref": "#" }
    ]
  }
}

关键部分解释

  • additionalProperties: 这个关键字用来定义对象所有未明确列出的属性的规则,正好适配你“任意数量属性”的要求。
  • oneOf: 确保每个属性值只能二选一——要么匹配枚举规则,要么匹配当前Schema的递归引用(也就是另一个Foo实例)。
  • "$ref": "#": 这是实现嵌套验证的核心,#指向当前Schema本身,完美支持多层嵌套的Foo对象。
  • 枚举定义: {"enum": ["A", "B"]}明确限定了属性值只能是A或B,后续要扩展枚举值直接修改这个数组就行。

验证通过的示例

你提供的这个对象可以被上面的Schema成功验证:

{ 
  "test": "A", 
  "test1": "B", 
  "test2": { 
    "test4": "A", 
    "test5": { 
      "test6": "B" 
    } 
  } 
}

额外优化建议

如果需要强制对象至少包含一个属性,可以在Schema里加上"minProperties": 1关键字;要是有其他枚举值扩展需求,直接更新enum数组内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:07:00