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

JSON Schema嵌套属性验证失效,如何基于eventName校验eventPayload/totalAmount

问题原因与解决方案

你遇到的核心问题是条件校验的上下文错误:当前你把if规则写在了totalAmount字段的Schema内部,此时校验的实例是totalAmount本身(一个数字/整数),而eventName是在根节点(或eventPayload的父节点),所以properties.eventName根本找不到对应的字段,导致条件永远不触发,自然不会执行then/else里的校验规则。

正确实现方式

需要将条件校验规则移到能访问到eventName的层级(比如根Schema),然后在then分支中对eventPayload.totalAmount进行针对性约束。同时注意:minLength是字符串类型的校验关键字,不能用于数字,需要删除。

以下是修正后的完整Schema示例:

{
  "type": "object",
  "properties": {
    "eventName": {
      "type": "string"
    },
    "eventPayload": {
      "type": "object",
      "properties": {
        "totalAmount": {
          "type": ["integer", "number"],
          "multipleOf": 0.01
        }
      }
    }
  },
  "allOf": [
    // 当eventName为Test10/Test12时,totalAmount必须大于0
    {
      "if": {
        "properties": {
          "eventName": {
            "enum": ["Test10", "Test12"]
          }
        },
        "required": ["eventName"]
      },
      "then": {
        "properties": {
          "eventPayload": {
            "properties": {
              "totalAmount": {
                "exclusiveMinimum": 0
              }
            },
            "required": ["totalAmount"]
          }
        }
      }
    },
    // 当eventName为Test1/Test2/Test3时,totalAmount必须小于0
    {
      "if": {
        "properties": {
          "eventName": {
            "enum": ["Test1", "Test2", "Test3"]
          }
        },
        "required": ["eventName"]
      },
      "then": {
        "properties": {
          "eventPayload": {
            "properties": {
              "totalAmount": {
                "exclusiveMaximum": 0
              }
            },
            "required": ["totalAmount"]
          }
        }
      }
    }
  ]
}

关键说明

  1. 层级调整:将if条件放在根Schema的allOf数组中,此时校验实例是整个JSON对象,能正常访问到eventName字段。
  2. 必填约束:在if中添加required: ["eventName"],确保只有当eventName存在且符合枚举值时,才触发对应的then规则。
  3. 移除错误关键字:删除totalAmount下的minLength,该关键字仅适用于字符串类型,对数字无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:30:49