2013-03-16 78 views
14

我在Mac OS X 10.8.2上使用Go 1.0.3,並且正在試驗json包,試圖將一個結構編組爲json,但我一直得到一個空的{} json目的。我的結構不編組到json

err值爲零,所以根據json.Marshal函數沒有任何錯誤,並且結構是正確的。這是爲什麼發生?

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Address struct { 
    street string 
    extended string 
    city string 
    state string 
    zip string 
} 

type Name struct { 
    first string 
    middle string 
    last string 
} 

type Person struct { 
    name Name 
    age int 
    address Address 
    phone string 
} 

func main() { 
    myname := Name{"Alfred", "H", "Eigenface"} 
    myaddr := Address{"42 Place Rd", "Unit 2i", "Placeton", "ST", "00921"} 
    me := Person{myname, 24, myaddr, "000 555-0001"} 

    b, err := json.Marshal(me) 

    if err != nil { 
    fmt.Println(err) 
    } 

    fmt.Println(string(b)) // err is nil, but b is empty, why? 
    fmt.Println("\n") 
    fmt.Println(me)   // me is as expected, full of data 
} 

回答

33

您必須創建您想要公開的字段。 像這樣:

type Address struct { 
    Street string 
    Extended string 
    City string 
    State string 
    Zip string 
} 

errnil因爲所有的出口領域,在這種情況下有沒有,是正確編組。

工作例如:http://play.golang.org/p/0Q8TIvZwuj

退房的文檔http://godoc.org/encoding/json/#Marshal

+1

那是它,我掩蓋了「每個_exported_結構體字段」行。謝謝。 – tlehman 2013-03-16 17:21:49

+0

感謝您指出「公衆」。 – 2017-11-14 14:25:27

4

請注意,您也可以操縱什麼在生成JSON的字段的名稱是通過執行以下操作:

type Name struct { 
    First string `json:"firstname"` 
    Middle string `json:"middlename"` 
    Last string `json:"lastname"` 
} 
+0

我喜歡這種關聯結構和json對象的方式。 – tlehman 2016-02-05 17:21:59