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

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

https://stackoverflow.com/questions/29347092/

相关文章:

java - 如何防止 Gson 将长数字(一个 json 字符串)转换为科学记数法格式?

json - 转义正则表达式以获取有效的 JSON

json - LibreOffice Calc 是否支持 JSON 文件导入/排序?

c# - 如何在 WebAPI 后端 C# 上接收 JSON 数据?

javascript - jQuery、AJAX、JSONP : how to actually s

javascript - Sequelize - 如何仅返回数据库结果的 JSON 对象?

java - 规范化 JSON 文件

javascript - 如何将输入文件对象序列化为 JSON?

c# - 在 JSON 反序列化期间没有为 'System.String' 类型定义无参数构造函数

php - 添加json文件注释