2013-03-16 28 views
14

Tôi đang sử dụng Go 1.0.3 trên Mac OS X 10.8.2 và tôi đang thử nghiệm gói json, cố gắng sắp xếp cấu trúc thành json, nhưng tôi vẫn nhận được số trống rỗng {} json vật.Cấu trúc của tôi không marshalling vào json

Giá trị err là không, vì vậy không có gì sai theo hàm json.Marshal và cấu trúc là chính xác. Tại sao chuyện này đang xảy ra?

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 
} 

Trả lời

33

Bạn phải tạo các trường mà bạn muốn sắp xếp công khai. Như thế này:

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

errnil bởi vì tất cả các lĩnh vực xuất khẩu, trong trường hợp này không có, được marshalled một cách chính xác.

dụ làm việc: http://play.golang.org/p/0Q8TIvZwuj

Kiểm tra các tài liệu http://godoc.org/encoding/json/#Marshal

+1

Đó là nó, tôi đã lướt qua dòng "Mỗi trường _exported_ struct". Cảm ơn bạn. – tlehman

+0

cảm ơn bạn đã chỉ ra "công khai". –

4

Lưu ý rằng bạn cũng có thể thao tác những gì tên của các trường trong JSON tạo ra là bằng cách làm như sau:

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

Tôi thích cách kết hợp cấu trúc và đối tượng json này. – tlehman

Các vấn đề liên quan