2015-09-20 123 views
2

我掙扎着爬從下面的代碼輸出正確的:爲什麼struct字段顯示爲空?

package main 

import (
    "encoding/json" 
    "fmt" 
) 

func main() { 

    var jsonBlob3 = []byte(`[ 
     {"name": "Platypus", "spec": "Monotremata", "id":25 }, 
     {"name": "Quoll", "spec": "Dasyuromorphia", "id":25 } 
    ]`) 
    type Animal2 struct { 
     name string 
     spec string 
     id uint32 
    } 
    var animals []Animal2 
    err := json.Unmarshal(jsonBlob3, &animals) 
    if err != nil { 
     fmt.Println("error:", err) 
    } 
    fmt.Printf("%+v\n", animals) 
} 

遊樂場snippet

打印時的結構域是空的。我相信在某個地方有一個愚蠢的錯誤,但我仍然是新的去,我已經堅持了幾個小時。請幫忙。

+0

礦約爲解組(不是大原因),但是這個問題的答案並沒有說清楚原因。當我搜索時它並沒有顯示出來。 – user568109

回答

5

這已經出現了很多次。問題是隻有導出的字段可以編組/解組。

通過以大寫(大寫)字母開頭輸出struct字段。

type Animal2 struct { 
    Name string 
    Spec string 
    Id uint32 
} 

試試Go Playground

請注意,JSON文本包含帶有小寫文本的字段名稱,但json程序包「足夠聰明」,足以與它們匹配。如果他們是完全不同的,你可以使用結構標籤告訴json包他們是如何發現(或應如何編組)在JSON文本,比如:

type Animal2 struct { 
    Name string `json:"json_name"` 
    Spec string `json:"specification"` 
    Id uint32 `json:"some_custom_id"` 
} 
相關問題