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

如何在JSON Schema中引用其他属性值及校验最值双向约束

关于JSON Schema中属性值引用与数值约束的解答

问题1:如何在JSON Schema中引用其他属性的值?

首先得澄清一个常见误区:$ref关键字是用来引用JSON Schema的片段(比如另一个属性的schema定义、外部schema文件等),而不是直接引用当前JSON实例中的属性值。如果要引用实例里其他属性的实际值,你需要用到$data关键字——这个特性是从JSON Schema Draft 07开始引入的。

使用$data时,你可以用JSON Pointer语法指向实例中的某个属性,比如"$data": "/minimumTolerance"就表示引用当前对象下的minimumTolerance属性的值。

问题2:能否实现minimumTolerance与maximumTolerance的大小约束?

当然可以!不过我猜你实际想表达的是maximumTolerance ≥ minimumTolerance(毕竟“不小于且反之亦然”等同于要求两值完全相等,这应该不是常见需求),下面就基于“最大值≥最小值”的合理需求给出实现方案。

首先,你的示例里用了Draft 06的schema,但Draft 06并不支持$data特性,所以得升级到Draft 07及以上版本。下面是正确的schema示例:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "MinMax",
  "description": "Minimum & Maximum Tolerance",
  "type": "object",
  "properties": {
    "minimumTolerance": {
      "type": "number",
      "maximum": { "$data": "/maximumTolerance" }
    },
    "maximumTolerance": {
      "type": "number",
      "minimum": { "$data": "/minimumTolerance" }
    }
  },
  "required": ["minimumTolerance", "maximumTolerance"]
}

这个schema会双向约束两个属性的数值:

  • 确保minimumTolerance的数值不超过maximumTolerance
  • 确保maximumTolerance的数值不低于minimumTolerance

如果你的需求真的是要求两个值完全相等,只需要把maximum和minimum换成const关键字,并用$data引用对方即可:

"minimumTolerance": {
  "type": "number",
  "const": { "$data": "/maximumTolerance" }
}

最后提醒下:不是所有JSON Schema验证工具都支持$data,使用前最好确认你的工具兼容Draft 07及以上版本的这个特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:32