2013-04-15 10 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:"Host", Id:"Identifier"} 

答えて

7

あなたのフィールドタグが間違っている期待

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

です。彼らは代替名を引用符で囲む必要があります。

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

技術的に、あなたは全くIdフィールドのタグは必要ありません。それがフィールドが機能していた理由です。

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

+0

いやはや、私はそれを逃した信じることができません。私は、非マーシャル時にキー名で大文字と小文字が区別されないことも認識していませんでした。ありがとうございました! –