encoding/json unmarshal缺少一个字段

Ask*_*sen 5 json go

以下代码解组为"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)
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是

Got status: &main.jsonStatus{Hostname:"", Id:"Identifier"}
Run Code Online (Sandbox Code Playgroud)

在哪里我期待

Got status: &main.jsonStatus{Hostname:"Host", Id:"Identifier"}
Run Code Online (Sandbox Code Playgroud)

小智 7

你的字段标签是错误的.他们需要替代名称的引号.

type jsonStatus struct {
    //--------------------v----v
    Hostname string `json:"host"`
    Id       string `json:"id"`
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,您根本不需要该Id字段的标记.这就是该领域正在发挥作用的原因.

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