假设我正在将JSON输入解析为这样的结构:
type Person struct {
Name string `json:"name"`
Age uint `json:"age"`
}
并传递错误数据(string
而不是int
):
var person Person
err := json.Unmarshal([]byte(`{"name": "Dilbert", "age": "unknown"}`), &person)
这是我可以从错误中提取的内容:
// Error json: cannot unmarshal string into Go value of type uint
fmt.Printf("Error %v\n", err)
// Unexpected value: unknown
jerr := err.(*json.UnmarshalTypeError)
fmt.Printf("Unexpected value: %s\n", (*jerr).Value)
// Expected type: uint
fmt.Printf("Unexpected type: %v\n", (*jerr).Type)
我还要报告哪个字段是错误的(age
,在我的情况下),这可能吗?
(我理解,例如,当您解析数组或标量值时,这不适用,但我仍然希望对象的情况可能有一些解决方法或技巧。)
答案 0 :(得分:5)
不幸的是,目前不支持此功能。
这有一个accepted issue。实施起来似乎并不简单(参见下面的报价),但希望Go 1.3附带。
稍微不方便实施,因为到时候出错了 生成解码器正在查看字段值本身,而不是 包含该字段的struct。相关代码甚至都不知道 它解码成结构域。有几种方法可以获得 在这周围,但他们是非平凡的。