2013-03-16 2 views
14

Ich benutze Go 1.0.3 auf Mac OS X 10.8.2, und ich experimentiere mit dem json Paket, versuchen, eine Struktur zu json zu marshallen, aber ich bekomme immer eine leere {} JSON Objekt.Meine Strukturen werden nicht in JSON Marseille

Der err Wert ist Null, also nichts ist falsch nach der json.Marshal-Funktion, und die Struktur ist korrekt. Warum passiert dies?

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 
} 

Antwort

33

Sie müssen die Felder, die Sie marshalen möchten, öffentlich machen. So:

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

err ist nil weil alle exportierten Felder, in diesem Fall gibt es keine gibt, richtig gemarshallt wurden.

Arbeitsbeispiel: http://play.golang.org/p/0Q8TIvZwuj

Schauen Sie sich die Dokumentation http://godoc.org/encoding/json/#Marshal

+1

That war es, ich habe über die Zeile "Each _exported_ struct field" geschrieben. Vielen Dank. – tlehman

+0

danke, dass du auf die "Öffentlichkeit" hingewiesen hast. –

4

Beachten Sie, dass Sie können auch manipulieren, was der Name der Felder in der generierten JSON sind, indem Sie die folgenden Schritte aus:

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

Ich mag diese Art der Verknüpfung von Strukturen und JSON-Objekten. – tlehman

Verwandte Themen