【问题标题】:I want to combine multiple JSON objects into a single array我想将多个 JSON 对象组合成一个数组
【发布时间】:2019-05-28 10:23:55
【问题描述】:

我正在尝试将多个 JSON 对象组合到一个 JSON 数组中,并可能过滤数据名称(温度、压力、高度)。

我尝试使用 JSON-Simple 和 Java,但无法使用。

以下是 JSON 的片段:

我要转换的输入:

{"temperature" : -12, "sendtimes" : 10000}
{"pressure" : 1000, "sendtimes" : 10001}
{"altitude" : 100.7, "sendtimes" : 10002}`

转换后我想要它:

{
  "temperaturData": [
      {"temperature": -12, "sendtimes": 10000},
      {"pressure" : 1000, "sendtimes" : 10001},
      {"altitude" : 100.7, "sendtimes" : 10002},
  ]
}

我不知道如何做到这一点,感谢所有可以帮助我的人!

【问题讨论】:

  • 感谢您的回复,但在那个问题中,输入已经格式化,我只有一个包含这三个对象的文件
  • 两个问题:输入文件是否保持原样,没有被{}[]包围?这是{"temperature" : -12, "sendtimes" : 10000} 在单行中,而所有其他单独的{} 包含在单行中的数据吗?

标签: java json type-conversion


【解决方案1】:

Jatin Asija 提到的 JSON 库是一个非常酷且简单的 JSON 库,您可以使用它来获得您想要的。然而,在 java 中使用 JSON 的事实标准是 Jackson JSON 库,也称为“FasterXML/jackson”。您所要做的就是使用ObjectMapperclass 及其方法readValue()writeValueAsString(Object value) 来做任何您想做的事情。 ObjectMappertutorial 很酷,下面是您可能需要使用它的 Maven 依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

这里是javadoc 代表ObjectMapper

【讨论】:

  • ObjectMapper类不就是关于如何将Java对象序列化为JSON并将JSON字符串反序列化为Java对象的吗?而且即使我们可以用它来完成上面提到的任务,但这不是会变得非常复杂和乏味吗?
  • Jatin - 是的,您是正确的,ObjectMapper 用于将 Java 类序列化和反序列化为 JSON。但是您的解决方案是相同的 - 使用 JSON 库您可以反序列化 JSON 字符串,然后对 java 对象执行操作,然后将它们序列化回 JSON 字符串。 JSON库对于简单的操作非常简单方便(也是我刚开始使用JSON的第一选择)。但是 Jackson JSON 功能要强大得多,而且速度肯定更快,而且还与 Spring 紧密集成,以实现科学背后的 JSON 序列化。所以它最终是一个更好的选择。
  • 是的,我知道这完全一样,但是对于ObjectMapper,需要创建一个额外的bean,但是使用org.json,可以简单地使用任何键和值, 和杰克逊一样,它首先解析 JSON,然后将其映射到 bean,使其比 org.json 中使用的HashMap 慢,但如果有人进一步想使用 bean,那么杰克逊更好,但对于上面提到的细节,好像不是这样的。
  • 我猜是贾汀。所以让 OP 决定他想要哪一个
【解决方案2】:

使用JSON Library

JSONArray arr = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("temperature", "-12");
obj.put("sendtimes", "1000");

arr.put(obj);
obj = new JSONObject();
obj.put("pressure", "1000");
obj.put("sendtimes", "1001");

arr.put(obj);

JSONObject finalObj = new JSONObject();
finalObj.put("temperaturData", arr);
System.out.println(finalObj);

尽管我的建议是,您最好也将键分配给给定的内部数组,这样可以轻松访问它并且没有错误。

【讨论】:

    【解决方案3】:

    您想要实现的目标非常简单。我正在使用 JavaScript,使用类似数据结构的任何其他语言都可以实现相同的目标。 您要做的是创建一个数组并将值附加到该数组。

    var tempData = {"temperaturData" : []}
    tempData["temperaturData"].push({"temperature": -12, "sendtimes": 10000})
    tempData["temperaturData"].push({"pressure" : 1000, "sendtimes" : 10001})
    tempData["temperaturData"].push({"altitude" : 100.7, "sendtimes" : 10002})
    JSON.stringify(tempData)
    

    【讨论】:

    • 谢谢,但是如果数据集越来越大,我该怎么做,所以每次我运行代码它都会转换它,不管有多少对象
    • 您可以将其转换为将数据添加到现有对象的函数
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多