2014-09-19 33 views
0

JSON對象:如何在標籤中使用Unmarshall/Marshall JSON?

{ 
"foo_bar": "content" 
} 

代碼:

type PrettyStruct struct { 
    Foo  string `json: "foo_bar"` 
} 

func whatever(r *http.Request) { 
    var req PrettyStruct 

    if err := json.NewDecoder(r.Body).Decode(&req); err != nil { 
     // ... 
    } 

    log.Println(req) 
} 

這只是輸出:

{} 

走的是不考慮我的標籤解碼JSON對象時,所以沒有什麼是解組到結構中並且每個字段都保持爲零值。
如果在JSON對象中該字段被稱爲「foo」或「Foo」,則一切正常。

我試過簡單的標籤"foo_bar"和以下變化`json: foo_bar`"json: foo_bar"

任何雖然我做錯了什麼?

回答

1

這是愚蠢的..但冒號和"foo_bar"之間的空間是問題。試試這個:

type PrettyStruct struct { 
    Foo  string `json:"foo_bar"` 
    //      ^^^ no space here 
} 

工作操場例如:http://play.golang.org/p/dEc_c0UAOC

+0

我想'去vet'可能趕上這個(和其他一些常見的錯誤!)。 – twotwotwo 2014-09-19 00:23:07

+0

這工作。非常感謝。 但由於標籤'''「foo_bar」'''沒有空格,爲什麼沒有這個工作? json包只考慮json標籤嗎?我認爲沒有標籤的標籤是通用標籤。 – 2014-09-19 00:24:23

+0

@ThiagoMartins結構標籤在鍵和值之間不能有空格,所以它必須是'key:「值value2」',在你的情況下它是'json:「foo_bar」',你不能有空格':'。 – OneOfOne 2014-09-19 00:32:27