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

JSON Schema Draft7:验证指定属性需存在于两个对象之一

解决方案

完全可以实现这个需求,基于JSON Schema Draft7的标准关键字就能搞定。

实现思路

针对/jobs/*/steps/*中包含run属性的元素,我们通过if/then语法锁定目标元素,再用anyOf要求它满足以下两个条件之一:

  • 自身存在foo属性;
  • 根节点下的/default/foo属性存在。

完整Schema代码

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "default": {
      "type": "object",
      "properties": {
        "foo": {}
      }
    },
    "jobs": {
      "type": "object",
      "patternProperties": {
        "^.*$": {
          "type": "object",
          "properties": {
            "steps": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "run": {},
                  "foo": {}
                },
                // 筛选出包含run属性的步骤元素
                "if": {
                  "required": ["run"]
                },
                // 对符合条件的元素施加验证规则
                "then": {
                  "anyOf": [
                    // 条件1:当前步骤自身存在foo属性
                    { "required": ["foo"] },
                    // 条件2:根节点的default下存在foo属性
                    {
                      "$ref": "#",
                      "required": ["default"],
                      "properties": {
                        "default": { "required": ["foo"] }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}

规则验证场景

  • 仅删除/default/foo:只要含run的步骤自身有foo,验证通过;
  • 仅删除步骤的foo:只要/default/foo存在,验证通过;
  • 两者都删除:含run的步骤会触发验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:26:14