json - 基于java8的具有多个JsonObject转换为映射的Json数组
问题描述
我有多个应用程序返回一个具有多个 JsonObject 的 JsonArray,例如 app1
[ {"Server":"PCF","Port":"9878","Calls":"655"},
{"Server":"AWS","Port":"5672","Calls":"655"},.... ].
所有 JsonObject 中的字段都是相同的。我想创建一个基于字段服务器的地图,其中包含 JsonObject 列表。
"PCF":[{"Server":"PCF","Port":"9878","Calls":"655"}, {"Server":"PCF","Port":"562","Calls":"65"}]
条件:1)我想使用java8(我在旧版本上做过)。2)我正在使用 org.json。
解决方案
我以前没有使用过 JSON-Java 库,但通过一些研究,似乎表明来自org.json的 JsonArray 实现了,java.lang.Iterable<java.lang.Object>
因此我们可以这样做:
Map<String, List<JSONObject>> result =
StreamSupport.stream(jsonArray.spliterator(), false)
.map(f -> (JSONObject) f) // assumes every 'f' is a JSONObject otherwise use filter before map
.collect(groupingBy(f -> f.getString("Server")));
如果您不转换为 aJSONObject
那么这将返回:
Map<String, List<Object>> result =
StreamSupport.stream(jsonArray.spliterator(), false)
.collect(groupingBy(f -> ((JSONObject)f).getString("Server")));
进口:
import java.util.stream.*;
import static java.util.stream.Collectors.*;
推荐阅读
- vbscript - ASP Classic:VbScript 函数是否可以返回对象?
- c++ - 声明指向向量的受保护指针的问题
- html - 如何相对于行高垂直移动文本?
- scala - Spark Streaming df.writeStream 不生成输出
- sql - 每天新的不同用户的 SQL
- c++ - 对象安全将元素从一个向量的末尾移动到另一个向量的末尾
- html - 当字体大小很大时,div内span的垂直对齐
- google-sheets - 仅使用某个组的值的饼图
- jquery - 我的 Rock, Pape, Scissors JQuery 代码不合逻辑
- r - xml转数据框时出现“无法找到函数的继承方法”错误如何解决?