gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:12:08 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

json.UnmarshalTypeError被导出,它的所有字段也是如此。您没有理由不能从自定义编码(marshal)拆收器返回此错误类型。事实上,我敢打赌这是这种类型的预期用途!

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

关于json - 从自定义 json Umarshaller 返回的错误缺少上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com