Encoding /json unmarshal缺少一个字段



下面的代码拆解了"Id",但没有拆解"Hostname"。为什么?我盯着它看了很长时间,如果这是一个打字错误,我知道我永远不会发现它。请帮助。(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: %#vn", status)
}
我得到的输出是
Got status: &main.jsonStatus{Hostname:"", Id:"Identifier"}

我期望

Got status: &main.jsonStatus{Hostname:"Host", Id:"Identifier"}

您的字段标签是错误的。他们需要在替代名称周围加上引号。

type jsonStatus struct {
    //--------------------v----v
    Hostname string `json:"host"`
    Id       string `json:"id"`
}

从技术上讲,您根本不需要Id字段的标记。这就是为什么那个字段能工作。

演示: http://play.golang.org/p/tiop27jNJe

相关内容

  • 没有找到相关文章

最新更新