当前位置: 首页 > 面试题库 >

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

轩辕风华
2023-03-14
问题内容

场景:
考虑以下是JSON:

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

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

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

问题: 有人能找到这种JSON解析的解决方案吗?我尝试了go-simplejson,gabs和default
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{}该值类型,在这种情况下,您的地图将是type
map[string]interface{}

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



 类似资料:
  • 场景: 考虑以下是JSON: 如果您注意到,数据的结构是这样的,即没有硬编码键提到/基本上只是值。 问题:我无法解析任何动态 JSON。 问题:有人能找到这种JSON解析的解决方案吗?我试着简单点 注意:以上JSON只是示例。有很多应用程序正在使用当前的API,所以我不想改变数据的结构。我的意思是我不能换成如下的东西: 然后我可以定义< code>struct

  • 问题内容: 我有以下需要反序列化的Json字符串。 第一个字段“ 123456789”是一个ID号,因此基本上该值可以根据要查询的数据而有所不同。 我在Visual Studio中使用C#。显然,因为第一个字段的值可以更改,所以我无法使用预定义的类将JSON反序列化为该字段,因为该字段将用作类名,但该字段的值与该类名不匹配。 有没有一种方法可以将其反序列化为某种动态类,但仍可以像访问预定义类一样访

  • 问题内容: 我有一个像这样的课程: 我想序列化它们的列表: 当我进行序列化时,动物属性的类型信息将丢失。有没有一种方法可以某种方式安装解析器侦听器,以便在遇到列表中的每个元素时提供正确的类进行反序列化?这就是手动提供描述类类型的字符串的想法。 谢谢 问题答案: Gson项目代码库中的RuntimeTypeAdapter据说可以很好地用于多态序列化和反序列化。我认为我尚未尝试使用它。有关更多信息,请

  • 本文向大家介绍.net实现序列化与反序列化实例解析,包括了.net实现序列化与反序列化实例解析的使用技巧和注意事项,需要的朋友参考一下 序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法。具体如下: 一般来说,.net中的序列化其实就是将一个对象的所有相关的数据保存为一个二进制文件(注意:是一个对象) 而且与这个对象相关的所有类型都必须是可序列化的

  • 从我的Java后端,我正在使用另一个我不管理的后端,它的API定义不可用。我正在创建它的服务的OpenAPI定义,并使用Swagger Codigen来生成客户端。 有一个endpoint返回一个复杂对象: 在该对象中,和始终存在,但在同一级别上有数百个动态项。在上面的示例中,关键点是可以预测的,但实际上是字母和数字的序列,类似于“245df921”。动态项始终是具有相同项数和相同预期位置的数组。

  • 问题内容: 我正在尝试使用Northwind OData服务: http://services.odata.org/V3/OData/OData.svc/Products?$format=json 并将其反序列化为一系列产品: 但是序列化器似乎不喜欢该部分,并且事实是那里有2 条记录(不确定它们是什么)。 是否有捷径可寻? 问题答案: 使用Json.Net