在没有所有键名的情况下解码Go中的JSON

roc*_*tas 5 json go unmarshalling

我是Go的新手,我试图通过向Unmarshal提供结构来解码json blob.麻烦的是,我不知道某些钥匙.我可以解析以下内容

{"age":21,"Travel":{"fast":"yes","sick":false} }
Run Code Online (Sandbox Code Playgroud)

像这样

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)

}
Run Code Online (Sandbox Code Playgroud)

获得 {21 {yes false}}

但是,我不明白我会如何接近这样的事情 -

{
  "age":21,
  "Travel":
     {
         "canada":
         {"fast":"yes","sick":false}, 
         "bermuda": 
         {"fast":"yes","sick":false}, 
         "another unknown key name":
         {"fast":"yes","sick":false},
     }
}
Run Code Online (Sandbox Code Playgroud)

没有在结构中明确宣布"加拿大","百慕大"等.我如何使用Unmarshal来解析上面的json?我找到了这个答案,但没看到它是如何实现的

pau*_*ljz 6

你可以解组成一个map[string]TravelType.将你的user结构改为这个,你应该好好去:

type user struct {
        Age    int
        Travel map[string]TravelType
}
Run Code Online (Sandbox Code Playgroud)

这是Go Playground上的一个有效的概念验证:http://play.golang.org/p/-4k9GE5ZlS