2015-09-20 153 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"` 
}