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

AJV JSON验证异常:特定JSON结构的规则修正需求

AJV JSON Schema 验证问题解决方案

核心设计思路

要实现你需要的二选一互斥验证、子属性类型校验和禁止非法属性,必须将oneOf与required、additionalProperties、type规则精准结合,每个oneOf分支仅约束对应合法场景的结构。

最终可直接使用的JSON Schema

{
  "type": "object",
  "properties": {
    "QuoteDocuments": {
      "type": "object",
      "additionalProperties": false,
      "oneOf": [
        {
          "required": ["CLQuoteXML"],
          "properties": {
            "CLQuoteXML": {
              "type": "object",
              "required": ["QuoteObject"],
              "properties": {
                "QuoteObject": {
                  "type": "object"
                }
              },
              "additionalProperties": false
            }
          }
        },
        {
          "required": ["CLQuoteDocument"],
          "properties": {
            "CLQuoteDocument": {
              "type": "object",
              "required": ["CLQuoteObject"],
              "properties": {
                "CLQuoteObject": {
                  "type": "object"
                }
              },
              "additionalProperties": false
            }
          }
        }
      ]
    }
  },
  "required": ["QuoteDocuments"],
  "additionalProperties": false
}

关键规则解析

  • 禁止非法属性:在根对象、QuoteDocuments及两个子对象上均设置additionalProperties: false,直接拦截非法场景3(存在未定义属性)。
  • 互斥二选一:oneOf的两个分支分别仅声明对应合法场景的必填属性,且通过required强制该属性存在。当同时出现CLQuoteXML和CLQuoteDocument时,两个分支均不匹配,自动触发非法场景4的报错。
  • 子属性类型校验:给QuoteObject和CLQuoteObject明确指定type: "object",直接拦截非法场景5(子属性为字符串类型)。
  • 必填子属性约束:每个分支内的子对象通过required强制对应子属性存在,确保合法场景1和2的结构完整性。

原异常修复说明

你之前遇到的错误,本质是oneOf分支的约束不明确:既未限制分支内只能存在对应属性,也未精准定义子属性的必填规则。导致当CLQuoteDocument下出现QuoteObject时,既不匹配要求CLQuoteXML的分支,也不匹配要求CLQuoteDocument下是CLQuoteObject的分支,AJV因此提示未匹配oneOf规则。上述Schema通过明确每个分支的属性范围和子属性要求,彻底解决了该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:02:54