2013-04-15 37 views
5

下面的代碼解組的「Id」,但不是「主機名」。爲什麼?我一直在盯着它,現在如果這是一個錯字,我知道我永遠不會發現它。請幫助。 (http://play.golang.org/p/DIRa2MvvAVencoding/json unmarshal缺少一個字段

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"} 

回答

7

你的字段標識是錯誤的。他們需要引用別名。

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

從技術上講,您根本不需要Id字段的標籤。這就是爲什麼這個領域工作。

DEMO:http://play.golang.org/p/tiop27jNJe

+0

衛生署,我無法相信我錯過了。我還沒有意識到,解組時,鍵名不區分大小寫。謝謝! –