首页 > 解决方案 > 基于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。

标签: jsonjava-8org.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.*;

推荐阅读