duankanyi6539 2014-02-17 01:16
浏览 30
已采纳

在不使用所有键名的情况下在Go中解码JSON

I'm new to Go and am trying to decode a json blob via feeding structs to Unmarshal. Trouble is, I dont know certain keys. I can parse the following

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

like 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)

}

to obtain {21 {yes false}}

However, I dont see how I would approach something like this-

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

without explictly declaring "Canada", "Bermuda", etc in structs. How could I use Unmarshal to parse the above json? I found this answer, but dont see how it might be implemented

  • 写回答

1条回答 默认 最新

  • duangejian6657 2014-02-17 01:26
    关注

    You can Unmarshal into a map[string]TravelType. Change your user struct to this and you should be good to go:

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

    Here's a working proof-of-concept on the Go Playground: http://play.golang.org/p/-4k9GE5ZlS

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么