场景:
考虑以下是 JSON:
{
"Bangalore_City": "35_Temperature",
"NewYork_City": "31_Temperature",
"Copenhagen_City": "29_Temperature"
}
如果您注意到,数据的结构方式没有提到 City
/Temperature
的硬编码键,它基本上只是值。
问题:我无法解析任何动态的 JSON。
问题:有人能找到解决这种 JSON 解析的方法吗?我试过 go-simplejson , gabs & 默认 encoding/json
但没有运气。
注意: 以上 JSON 仅供示例。而且有很多应用程序正在使用当前的 API,所以我不想更改数据的结构。我的意思是我无法更改为如下内容:
[{
"City_Name":"Bangalore",
"Temperature": "35"
},...]
然后我可以定义struct
type TempData struct {
City_Name string
Temperature string
}
最佳答案
例如,您可以解码为 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{}
作为值类型,在这种情况下,您的 map 将属于 map[string]interface{}
类型。
另请注意,我创建了一个库来轻松处理此类动态对象,这在这些情况下可能会有很大帮助:github.com/icza/dyno
.
关于json - 如何解析/反序列化动态 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650830/