自定义json Umarshaller返回的错误缺少上下文
我正在编写一个解析JSON对象的函数。我想发出结构化错误消息,指出哪些特定字段中有错误 最初,我检查错误类型是否为自定义json Umarshaller返回的错误缺少上下文,json,go,Json,Go,我正在编写一个解析JSON对象的函数。我想发出结构化错误消息,指出哪些特定字段中有错误 最初,我检查错误类型是否为*json.unmarshaltypererror,然后从其字段属性中检索json标记名。不幸的是,如果我要将JSON解组到的结构具有实现自己的解组JSON函数的自定义类型,则此操作将失败。它们返回的错误是我的自定义错误,无法确定它们来自结构的哪个字段 将内置错误与自定义错误进行对比: 此时,我正在考虑改为使用反射,首先将对象解组为json.RawMessage的映射,然后一次解组一
*json.unmarshaltypererror
,然后从其字段
属性中检索json标记名。不幸的是,如果我要将JSON解组到的结构具有实现自己的解组JSON
函数的自定义类型,则此操作将失败。它们返回的错误是我的自定义错误,无法确定它们来自结构的哪个字段
将内置错误与自定义错误进行对比:
此时,我正在考虑改为使用反射,首先将对象解组为json.RawMessage
的映射,然后一次解组一个字段,以便识别有问题的字段。有没有更简单的方法?这将需要我基本上复制内部json包逻辑来分析json标记,以确定将每个原始消息解组到哪个字段。和它的所有字段一样导出。没有理由不能从自定义封送拆收器返回此错误类型。事实上,我敢说这是这种类型的预期用途
func (third *Second) UnmarshalJSON(data []byte) error {
return &json.UnmarshalTypeError{
// ...
}
}
为什么不返回一个
*json.UnmarshalTypeError
?@JimB,很好用,谢谢!如果可以的话,我会接受这个答案。下面是一个更新的示例: