2014-02-17 41 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

相关问题