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

Go中使用gojsonschema校验JSON Schema时报额外属性不允许错误如何解决?

报错原因

  • 核心原因是校验对象与Schema定义的层级不匹配:你贴出的Schema根层级是RPCRequest结构,只允许根节点存在params一个字段,根节点的additionalProperties设为了false。你调用gojsonschema.Validate时直接传入了GetChartRequest类型的params实例作为校验对象,相当于用RPCRequest的根规则校验内层的params结构,GetChartRequest里的returnValues、ID等字段都不属于根规则允许的字段,自然会触发额外属性不允许的报错。
  • 次要问题:你当前的Schema没有显式定义returnValues的布尔类型校验规则,不符合你“属性存在时需完成合规校验”的需求。

修复方案

方案1:单独校验params对象(推荐,符合你当前的传参逻辑)

直接使用params对应的Schema做校验,不要套外层的RPCRequest规则,同时补充returnValues的校验规则:

{
  "title":"RPCParams",
  "type":"object",
  "properties":{
    "returnValues": {
      "type": "boolean"
    }
  },
  "additionalProperties":true
}

校验逻辑保持现有传参不变即可。

方案2:校验完整RPCRequest结构

如果你确实需要校验外层请求结构,需要调整传参,传入包裹了params字段的外层对象:

  1. 定义外层请求结构体:
type RPCRequest struct {
    Params GetChartRequest `json:"params"`
}
  1. 校验时传入外层结构体实例的Loader:
// req 是构造好的RPCRequest实例
gojsonschema.Validate(schema, gojsonschema.NewGoLoader(req))
  1. 可以同时在原Schema的params.properties中补充returnValues的定义,满足类型校验需求:
{
   "title":"RPCRequest",
   "type":"object",
   "properties":{
      "params":{
         "description":"rpc method parameters",
         "type":"object",
         "properties": {
            "returnValues": {
              "type": "boolean"
            }
         },
         "additionalProperties":true
      }
   },
   "required":[
      "params"
   ],
   "additionalProperties":false
}

额外排查点

如果确认层级没有问题,需要检查你加载的Schema是否为最新版本,是否存在缓存的旧Schema把params的additionalProperties设为了false的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:27:04