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

如何用JSON Schema验证属性名与嵌套name字段值匹配?

解决方案:强制属性名与嵌套name值匹配

当然可以实现这个要求!在JSON Schema Draft 06及后续版本中,你可以利用$data关键字(用来引用实例中的其他值)结合patternProperties,让外层属性名和对应的嵌套name属性值强制保持一致。

修改后的JSON Schema

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "type": "object",
  "patternProperties": {
    "^\\w[-\\w_]*$": {
      "$ref": "#/definitions/source"
    }
  },
  "additionalProperties": false,
  "definitions": {
    "source": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "const": { "$data": "1#" }
        },
        "standalone": {
          "type": "boolean"
        }
      },
      "required": ["name", "standalone"],
      "additionalProperties": false
    }
  }
}

关键逻辑说明

  • $data: "1#"是JSON Pointer语法,这里的1#指向当前source对象的父级键名(也就是外层的属性名,比如你示例中的"a")。
  • 通过给name属性添加const约束,要求它的值必须和外层属性名完全匹配,不匹配的实例就会验证失败。

验证效果测试

对于你给出的失败案例:

{ "a": { "name": "b", "standalone": false } }

这个实例会验证失败,因为外层属性名是"a",但嵌套的name值是"b",不符合const的约束要求。

注意事项

  • $data关键字从JSON Schema Draft 06开始引入,确保你使用的验证工具支持该版本及以上(比如Ajv、JSON Schema Validator等主流工具都支持)。
  • 保持原来的patternProperties规则,确保外层属性名符合你定义的命名规范(^\w[-\w_]*$)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:13:33