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

标签 json go

场景:
考虑以下是 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/

相关文章:

php - $_POST 值在 SSL 打开后消失

javascript - jQuery 如何从 responseText 中读取这个 JSON 字符串

json - 如何将 JSON 响应转换为工作表中的表格

go - io.Pipe Write() 和 Read() 函数如何工作?

json - 使用 GO 返回一个结构数组作为 Json 响应

java - Struts2 在带有 &quote 的 jsp 文件上显示 json 数据

http - Go 中基于 HTTP 的 JSONRPC

oop - 动态结构成员名称,如 golang 中的 javascript

go - 在没有锁的情况下并发读取函数指针是否安全?

编码时未考虑 JSON 字段标记问题