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

JSON Schema未按预期校验失效,求基于key约束data的优化方案

优化JSON Schema实现动态校验组件data属性

问题根源

原Schema校验失效的核心原因:

  1. 校验路径错误:规则要求prop1/prop2在组件根节点,但待校验JSON中这些属性实际在data子对象内,导致规则从未命中。
  2. 未限制非法属性:没有禁止不符合当前key的属性存在,也未确保组件仅匹配一种规则,错误的属性组合无法被检测。

优化后的Schema

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
        "components": {
            "type": "array",
            "minItems": 1,
            "items": {
                "type": "object",
                "required": ["key", "data"],
                "properties": {
                    "key": { "type": "string" },
                    "data": { "type": "object" }
                },
                "oneOf": [
                    {
                        "if": {
                            "properties": {
                                "key": { "const": "x" }
                            },
                            "required": ["key"]
                        },
                        "then": {
                            "properties": {
                                "data": {
                                    "type": "object",
                                    "required": ["prop1"],
                                    "properties": {
                                        "prop1": { "type": "string" }
                                    },
                                    "additionalProperties": false
                                }
                            }
                        },
                        "else": false
                    },
                    {
                        "if": {
                            "properties": {
                                "key": { "const": "y" }
                            },
                            "required": ["key"]
                        },
                        "then": {
                            "properties": {
                                "data": {
                                    "type": "object",
                                    "required": ["prop2"],
                                    "properties": {
                                        "prop2": { "type": "string" }
                                    },
                                    "additionalProperties": false
                                }
                            }
                        },
                        "else": false
                    }
                ]
            }
        }
    },
    "required": ["components"]
}

关键优化点

  • 修正校验路径:将prop1/prop2的校验规则移至data子Schema中,完全匹配待校验JSON的结构。
  • oneOf替代anyOf:确保每个组件只能匹配一种key对应的规则,避免模糊匹配导致的校验漏洞。
  • 禁用额外属性:在data层级添加additionalProperties: false,严格限制属性范围——比如key为x时,data中只能存在prop1,无法包含prop2,反之亦然。
  • 强化排他性:每个规则添加else: false,不匹配当前key的组件直接判定为无效。
  • 明确必填项:组件层级要求key和data为必填属性,避免缺失核心字段导致的规则失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:16:26