2014-02-17 43 views
5

我是Go的新手,試圖通過向Unmarshal提供結構來解碼json blob。麻煩是,我不知道某些鍵。我可以分析如下在沒有所有關鍵名字的情況下對JSON進行解碼

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

像這樣

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) 

} 

獲得{21 {yes false}}

但是,我不看我怎麼會接近像這個 -

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

東西沒有顯式在結構中宣佈「加拿大」,「百慕大」等。我怎麼能用Unmarshal來解析上面的json?我發現這answer,但不知道它可能如何實施

回答

6

你可以解組爲map[string]TravelType。您user結構改成這樣,你應該是好去:

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

這裏的隨身遊樂場工作證明的概念:http://play.golang.org/p/-4k9GE5ZlS

+0

完美,三江源! – rocketas

相關問題