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

如何编写Schema约束属性匹配任一子Schema?解决jsonschema报错

正确的JSON Schema编写方案

你的错误根源在于把oneOf关键字放在了properties内部,这违反了JSON Schema的规范——oneOf是顶层关键字,必须和properties、type等关键字同级。另外原Schema没有明确区分两种结构的必填字段,也没处理专属字段的排他性。

以下是可以正确验证两种结构的Schema:

{
  "type": "object",
  "required": ["name", "step"],
  "properties": {
    "name": { "type": "string" },
    "step": { "type": "number" }
  },
  "oneOf": [
    {
      "required": ["start", "stop"],
      "properties": {
        "start": { "type": "number" },
        "stop": { "type": "number" }
      },
      "additionalProperties": false
    },
    {
      "required": ["center", "span"],
      "properties": {
        "center": { "type": "number" },
        "span": { "type": "number" }
      },
      "additionalProperties": false
    }
  ]
}

关键说明:

  • type: "object":明确待验证的是JSON对象
  • required: ["name", "step"]:指定两种结构共有的必填字段
  • properties:定义公共字段的类型规则
  • oneOf:限制只能匹配其中一个分支的规则:
    • 第一个分支:强制要求存在start和stop,且禁止出现其他未定义字段(additionalProperties: false),确保不会混入center/span
    • 第二个分支:强制要求存在center和span,同样禁止额外字段,确保不会混入start/stop

验证效果:

  • 第一种带start/stop的结构会匹配第一个分支,通过验证
  • 第二种带center/span的结构会匹配第二个分支,通过验证
  • 若同时出现两类专属字段、缺少必填字段,或者出现未定义字段,都会触发验证失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:25:15