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

时间:2017-04-05 21:32:17

标签: json go

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

最初,我检查了错误类型是否为*json.UnmarshalTypeError,然后从其Field属性中检索了json标记名称。不幸的是,如果我解组JSON的结构具有实现自己的UnmarshalJSON函数的自定义类型,则会失败。他们返回的错误是我的自定义错误,无法确定它们来自哪个结构域。

Playground对比内置vs自定义错误:https://play.golang.org/p/auH3PE7j5H

此时我正在考虑更改为使用反射,最初将对象解组为json.RawMessage的地图,然后一次解组一个字段,以便我可以识别有问题的字段。有没有更简单的方法?这将要求我基本上复制内部json包逻辑以分析json标记,以找出将每条原始消息解组成哪个字段。

1 个答案:

答案 0 :(得分:1)

导出

json.UnmarshalTypeError及其所有字段。您无法从自定义封送程序返回此错误类型。事实上,我冒昧这是这种类型的预期用途

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