2014-02-17 8 views
5

Ich bin neu in Go und versuche, einen Json Blob über Fütterungsstrukturen zu Unmarshal zu dekodieren. Das Problem ist, ich kenne bestimmte Schlüssel nicht. Ich kann die folgendeJSON in Go entschlüsseln ohne alle Schlüsselnamen

{"age":21,"Travel":{"fast":"yes","sick":false} } 

wie so

type user struct { 
    Age int 
    Travel TravelType 
} 

type TravelType struct { 
    Fast string 
    Sick bool 
} 


func main() { 
    src_json := []byte(`{"age":21,"travel":{"fast":"yes","sick":false}}`) 
    u := user{} 
    err := json.Unmarshal(src_json, &u) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Printf("%v", u) 

} 

zu erhalten {21 {yes false}}

jedoch analysieren, ich sehe nicht, wie ich so etwas wie this-

{ 
    "age":21, 
    "Travel": 
    { 
     "canada": 
     {"fast":"yes","sick":false}, 
     "bermuda": 
     {"fast":"yes","sick":false}, 
     "another unknown key name": 
     {"fast":"yes","sick":false}, 
    } 
} 

ohne explictly nähern würde "Canada", "Bermuda" usw. in Strukturen deklarieren. Wie könnte ich Unmarshal verwenden, um den obigen JSON zu parsen? Ich fand diese answer, aber nicht sehen, wie es umgesetzt werden könnte

Antwort

6

Sie können Unmarshal in eine map[string]TravelType. Ändern Sie Ihre user Struktur auf diese und Sie sollten gut gehen:

type user struct { 
     Age int 
     Travel map[string]TravelType 
} 

hier ein Arbeits Proof-of-concept auf der Go Spielplatz: http://play.golang.org/p/-4k9GE5ZlS

+0

Perfect, danke! – rocketas