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

如何在JSON Schema中基于其他属性值验证属性值?

动态验证JSON属性值唯一性方案

针对你需要验证对象中所有属性值唯一(允许任意输入值)的需求,可以使用JSON Schema Draft 7及以上版本支持的$data关键字来实现动态值引用,无需预先指定固定值。

完整验证Schema示例

{
  "type": "object",
  "properties": {
    "A": {
      "type": "string",
      "not": {
        "anyOf": [
          {"const": {"$data": "1/B"}},
          {"const": {"$data": "1/C"}}
        ]
      }
    },
    "B": {
      "type": "string",
      "not": {
        "anyOf": [
          {"const": {"$data": "1/A"}},
          {"const": {"$data": "1/C"}}
        ]
      }
    },
    "C": {
      "type": "string",
      "not": {
        "anyOf": [
          {"const": {"$data": "1/A"}},
          {"const": {"$data": "1/B"}}
        ]
      }
    }
  }
}

规则说明

  • $data关键字用于动态引用当前对象内的其他属性值,路径1/A表示当前层级(对象层级)下的A属性值。
  • 每个属性通过not.anyOf规则,确保自身值不等于另外两个属性的任意一个值。
  • 无论用户输入什么字符串,只要三个属性中出现重复值,就会触发验证失败。

可选属性适配(若属性非必填)

如果部分属性是可选的,仅当属性存在时才验证值唯一性,可以调整为if/then组合规则:

{
  "type": "object",
  "properties": {
    "A": {
      "type": "string",
      "allOf": [
        {
          "if": {"required": ["B"]},
          "then": {"not": {"const": {"$data": "1/B"}}}
        },
        {
          "if": {"required": ["C"]},
          "then": {"not": {"const": {"$data": "1/C"}}}
        }
      ]
    },
    "B": {
      "type": "string",
      "allOf": [
        {
          "if": {"required": ["A"]},
          "then": {"not": {"const": {"$data": "1/A"}}}
        },
        {
          "if": {"required": ["C"]},
          "then": {"not": {"const": {"$data": "1/C"}}}
        }
      ]
    },
    "C": {
      "type": "string",
      "allOf": [
        {
          "if": {"required": ["A"]},
          "then": {"not": {"const": {"$data": "1/A"}}}
        },
        {
          "if": {"required": ["B"]},
          "then": {"not": {"const": {"$data": "1/B"}}}
        }
      ]
    }
  }
}

这种写法下,只有当对应属性存在时,才会检查值是否重复,避免因属性缺失导致的不必要验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:19