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

JSON Schema数组验证失效问题求助

问题分析与解决方案

我帮你定位到了两个核心配置错误,这就是你的JSON Schema没能正确验证数组内容的原因:

关键错误解析

  1. additionalProperties: false 位置错误
    你把这个限制额外属性的规则写在了meta属性的定义块里,这意味着它是用来约束meta字段的(但meta是字符串类型,根本不需要这个配置),而非约束数组里的元素对象。这就导致测试JSON里的author、ip等未定义字段完全不受限制。

  2. required: ["hash"] 位置错误
    你把必填字段的要求放在了数组层级上,而不是数组元素的对象层级。数组本身不存在hash属性,所以这个规则等于无效,测试JSON里的元素没有hash也能通过验证。

修正后的JSON Schema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://json-schema.org/draft-07/schema#",
  "title": "JSON Validator",
  "type": "object",
  "additionalProperties": {
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
        "hash": { "type": "string" },
        "date": { "type": "string" },
        "uuid": { "type": "string" },
        "task": {
          "type": "object",
          "properties": {
            "name": { "type": "string" },
            "order": { "type": "integer" },
            "step": { "type": "integer" }
          },
          "additionalProperties": false  // 可选:如果需要限制task对象的额外属性可添加
        },
        "meta": { "type": "string" }
      },
      "required": ["hash"],  // 移至数组元素对象层级,要求每个元素必须包含hash字段
      "additionalProperties": false  // 移至此处,限制数组元素对象不能有未定义属性
    }
  }
}

验证效果

用修正后的Schema验证你的测试JSON时,会触发两个符合预期的错误:

  • 每个数组元素都缺少必填的hash字段
  • 数组元素包含了未定义的额外属性(如author、ip、message等)

这样就完全实现了你想要的严格验证逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:03