Go:获取一个损坏的JSON字段名称

时间:2014-05-10 15:15:01

标签: json go

假设我正在将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,在我的情况下),这可能吗?

(我理解,例如,当您解析数组或标量值时,这不适用,但我仍然希望对象的情况可能有一些解决方法或技巧。)

1 个答案:

答案 0 :(得分:5)

不幸的是,目前不支持此功能。

这有一个accepted issue。实施起来似乎并不简单(参见下面的报价),但希望Go 1.3附带。

  

稍微不方便实施,因为到时候出错了   生成解码器正在查看字段值本身,而不是   包含该字段的struct。相关代码甚至都不知道   它解码成结构域。有几种方法可以获得   在这周围,但他们是非平凡的。