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

是否可在JSON Schema定义中引用自身数据校验内部数据完整性?

JSON Schema 内部数据完整性校验实现方案

首先可以明确:完全可以通过JSON Schema实现你要的内部数据一致性校验,不需要额外写运行时检查逻辑就能识别"ba"这类非法值。

原写法误区说明

你之前的写法存在概念混淆:

  • $ref是用来引用JSON Schema内部定义的其他schema结构,无法指向待校验的业务数据实例中的字段值
  • 要引用当前待校验实例的字段,需要使用JSON Schema 2020-12规范提供的$data关键字

正确的Schema写法

你只需要将name字段的enum配置修改为通过$data指向实例的childNames数组即可,JSON Pointer路径写/childNames:

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://tbd.com/foo/bar",
    "type": "object",
    "properties": {
       "childNames": {
          "type": "array",
          "items": { "type": "string" }
       },
       "children": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "enum": { "$data": "/childNames" }
              }
            },
            "required": ["name"]
          }
       }
    },
    "required": ["childNames", "children"]
}

校验效果

用你给出的示例数据校验时,children[1].name的值ba不在childNames数组的取值范围内,会直接触发enum校验错误,符合你的需求。

注意事项

使用前需要确认你所用的JSON Schema校验器支持2020-12版本的$data特性,主流校验器如Ajv v8及以上版本均已兼容该特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:07