以下代码解组为“Id”,而不是“主机名”。为什么?我已经盯着它看了很长时间,如果这是一个错字,我知道我永远不会发现它。请帮忙。 (http://play.golang.org/p/DIRa2MvvAV)
package main
import (
"encoding/json"
"fmt"
)
type jsonStatus struct {
Hostname string `json:host`
Id string `json:id`
}
func main() {
msg := []byte(`{"host":"Host","id":"Identifier"}`)
status := new(jsonStatus)
err := json.Unmarshal(msg, &status)
if err != nil {
fmt.Println("Unmarshall err", err)
}
fmt.Printf("Got status: %#v\n", status)
}
我得到的输出是
Got status: &main.jsonStatus{Hostname:"", Id:"Identifier"}
我期待的地方
Got status: &main.jsonStatus{Hostname:"Host", Id:"Identifier"}
答案 0 :(得分:7)
您的字段标记错误。他们需要替代名称的引号。
type jsonStatus struct {
//--------------------v----v
Hostname string `json:"host"`
Id string `json:"id"`
}
从技术上讲,您根本不需要Id
字段的标记。这就是该领域正在发挥作用的原因。