小编典典

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

go

场景:
考虑以下是JSON:

{
   "Bangalore_City": "35_Temperature",
   "NewYork_City": "31_Temperature",
   "Copenhagen_City": "29_Temperature"
}

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

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

问题: 有人能找到这种JSON解析的解决方案吗?我尝试了go-simplejsongabs和default
encoding/json但没有运气。

注意: 上面的JSON仅用于示例。而且有许多应用程序正在使用当前的API,因此我不想更改数据的结构。我的意思是我不能更改为以下内容:

[{
   "City_Name":"Bangalore",
   "Temperature": "35"
},...]

然后我可以定义 struct

type TempData struct {
  City_Name string
  Temperature  string
}

阅读 315

收藏
2020-07-02

共1个答案

小编典典

您可以将其编组map[string]string为例如:

m := map[string]string{}
err := json.Unmarshal([]byte(input), &m)
if err != nil {
    panic(err)
}
fmt.Println(m)

输出(包装):

map[Bangalore_City:35_Temperature NewYork_City:31_Temperature
    Copenhagen_City:29_Temperature]

Go Playground上尝试一下。

这样,无论键或值是什么,您都可以在map其中成对打印或循环显示所有对。

还要注意,尽管您的示例仅包含string值,但是如果值类型是变化的(例如string,数字等),则可以使用interface{}该值类型,在这种情况下,您的地图将是type
map[string]interface{}

另请注意,我创建了一个库来轻松处理此类动态对象,这在以下情况下可能会很有帮助:github.com/icza/dyno

2020-07-02