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

嵌套数组对象中特定值的JSON Schema验证失效问题排查

嵌套JSON Schema验证失效的原因与解决方法

问题场景

我有一个包含图片的JSON文件,每张图片对应多个Versions版本,需要验证特定维度的版本数据。当前使用的JSON Schema错误地让不符合要求的JSON通过了验证(本应拒绝):

不符合要求的JSON示例:

{
  "Images": [
    {
      "Versions": [
        {
          "imgProperties": "x"
        },
        {
          "imgProperties": "z"
        }
      ]
    }
  ]
}

当前使用的Schema:

{
  "Images": {
    "type": "array",
    "minItems": 1,
    "items": {
      "type": "object",
      "properties": {
        "Versions": {
          "type": "array",
          "allOf": [
            {
              "contains": {
                "type": "object",
                "properties": {
                  "imgProperties": {
                    "type": "string",
                    "pattern": "foo1|bar1"
                  }
                },
                "required": [
                  "imgProperties"
                ]
              }
            },
            {
              "contains": {
                "type": "object",
                "properties": {
                  "imgProperties": {
                    "type": "string",
                    "pattern": "foo2|bar2"
                  }
                },
                "required": [
                  "imgProperties"
                ]
              }
            }
          ]
        }
      }
    }
  }
}

单独验证Versions数组时逻辑正常,但嵌套到整个Schema后验证失效。

原因分析

你的Schema存在结构不规范问题:

  • JSON Schema的顶级结构必须是一个对象,且需明确指定"type": "object"
  • 顶级属性Images没有被包裹在properties字段内,直接作为Schema的顶级键,导致验证引擎无法正确识别这是对JSON根对象中Images字段的约束规则。单独验证Versions数组时,目标是数组本身,结构匹配所以生效;但嵌套后整个Schema不符合规范,验证引擎会忽略无效的结构定义,导致约束不生效。

解决方法

修正Schema的顶级结构,添加"type": "object"并将Images字段放入properties中,确保整个Schema符合JSON Schema规范:

修正后的Schema:

{
  "type": "object",
  "properties": {
    "Images": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "Versions": {
            "type": "array",
            "allOf": [
              {
                "contains": {
                  "type": "object",
                  "properties": {
                    "imgProperties": {
                      "type": "string",
                      "pattern": "foo1|bar1"
                    }
                  },
                  "required": ["imgProperties"]
                }
              },
              {
                "contains": {
                  "type": "object",
                  "properties": {
                    "imgProperties": {
                      "type": "string",
                      "pattern": "foo2|bar2"
                    }
                  },
                  "required": ["imgProperties"]
                }
              }
            ]
          }
        },
        "required": ["Versions"]
      }
    }
  },
  "required": ["Images"]
}

额外优化:

  • 添加required字段,确保Images和Versions字段必须存在,避免遗漏必填项的验证
  • 保留原有的allOf+contains逻辑,确保Versions数组同时包含符合foo1|bar1和foo2|bar2规则的版本项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:32:52