【发布时间】:2014-01-06 06:03:11
【问题描述】:
我有一个如下所示的 JSON 对象:
{"API version":"1.2.3"}
我想使用 go 中的json.Unmarshal() 函数将它转换为一个对象。根据this blog post:
Unmarshal如何识别存储解码数据的字段?对于给定的 JSON 键"Foo",Unmarshal将通过目标结构的字段查找(按优先顺序):
- 标签为
"Foo"的导出字段(有关结构标签的更多信息,请参见Go spec),- 名为
"Foo"的导出字段,或- 名为
"FOO"或"FoO"或"Foo"的其他一些不区分大小写的匹配项。
unmarshal documentation 确认了这一点。
由于“API 版本”中有一个空格,这不是有效的 go 标识符,所以我在字段上使用了一个标签:
type ApiVersion struct {
Api_version string "API version"
}
我尝试像这样解组它:
func GetVersion() (ver ApiVersion, err error) {
// Snip code that gets the JSON
log.Println("Json:",string(data))
err = json.Unmarshal(data,&ver)
log.Println("Unmarshalled:",ver);
}
输出是:
2014/01/06 16:47:38 Json: {"API version":"1.2.3"}
2014/01/06 16:47:38 Unmarshalled: {}
如您所见,JSON 并未编组到 ver。我错过了什么?
【问题讨论】: