自定义json Umarshaller返回的错误缺少上下文

自定义json Umarshaller返回的错误缺少上下文,json,go,Json,Go,我正在编写一个解析JSON对象的函数。我想发出结构化错误消息,指出哪些特定字段中有错误 最初,我检查错误类型是否为*json.unmarshaltypererror,然后从其字段属性中检索json标记名。不幸的是,如果我要将JSON解组到的结构具有实现自己的解组JSON函数的自定义类型,则此操作将失败。它们返回的错误是我的自定义错误,无法确定它们来自结构的哪个字段 将内置错误与自定义错误进行对比: 此时,我正在考虑改为使用反射,首先将对象解组为json.RawMessage的映射,然后一次解组一

我正在编写一个解析JSON对象的函数。我想发出结构化错误消息,指出哪些特定字段中有错误

最初,我检查错误类型是否为
*json.unmarshaltypererror
,然后从其
字段
属性中检索json标记名。不幸的是,如果我要将JSON解组到的结构具有实现自己的
解组JSON
函数的自定义类型,则此操作将失败。它们返回的错误是我的自定义错误,无法确定它们来自结构的哪个字段

将内置错误与自定义错误进行对比:

此时,我正在考虑改为使用反射,首先将对象解组为
json.RawMessage
的映射,然后一次解组一个字段,以便识别有问题的字段。有没有更简单的方法?这将需要我基本上复制内部json包逻辑来分析json标记,以确定将每个原始消息解组到哪个字段。

和它的所有字段一样导出。没有理由不能从自定义封送拆收器返回此错误类型。事实上,我敢说这是这种类型的预期用途

func (third *Second) UnmarshalJSON(data []byte) error {
    return &json.UnmarshalTypeError{
        // ...
    }
}

为什么不返回一个
*json.UnmarshalTypeError
?@JimB,很好用,谢谢!如果可以的话,我会接受这个答案。下面是一个更新的示例: