如何解析/反序列化动态 JSON

场景:

考虑以下是 JSON :


{

   "Bangalore_City": "35_Temperature",

   "NewYork_City": "31_Temperature",

   "Copenhagen_City": "29_Temperature"

}

如果您注意到,数据的结构方式没有硬编码键提及City/Temperature它基本上只是值。


问题:我无法解析任何动态的 JSON。


问题:有人能找到这种 JSON 解析的解决方案吗?我试过go-simplejson,gabs & defaultencoding/json但没有运气。


注意: 以上 JSON 仅用于示例。并且有很多应用程序都在使用当前的 API,所以我不想改变数据的结构。我的意思是我不能更改为以下内容:


[{

   "City_Name":"Bangalore",

   "Temperature": "35"

},...]

然后我可以定义 struct


type TempData struct {

  City_Name string

  Temperature  string

}


守着一只汪
浏览 149回答 3
3回答

开心每一天1111

标准encoding/json适用于大多数用例,但与替代解决方案相比,它可能相当慢。如果您需要性能,请尝试使用fastjson。它可以解析任意 JSON,而无需创建与 JSON 模式匹配的结构或映射。请参阅下面的示例代码。它遍历(key, value)JSON 对象的所有对:var p fastjson.Parserv, err := p.Parse(input)if err != nil {    log.Fatal(err)}// Visit all the items in the top objectv.GetObject().Visit(func(k []byte, v *fastjson.Value) {    fmt.Printf("key=%s, value=%s\n", k, v)    // for nested objects call Visit again    if string(k) == "nested" {        v.GetObject().Visit(func(k []byte, v *fastjson.Value) {            fmt.Printf("nested key=%s, value=%s\n", k, v)        })    }})

梵蒂冈之花

只是添加一个关于如何解析任何有效 JSON 的一般答案;var m interface{}适用于所有类型。这包括映射(OP 要求的)数组、字符串、数字和嵌套结构。var m interface{}err := json.Unmarshal([]byte(input), &m)if err != nil {    panic(err)}fmt.Println(m)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go