Json数组具有多个JsonObject转换,以基于java8进行映射



我有多个应用程序,它们返回具有多个JsonObject的JsonArray像这样,例如app1

[ {"Server":"PCF","Port":"9878","Calls":"655"},
{"Server":"AWS","Port":"5672","Calls":"655"},.... ].

所有JsonObject中的字段都是相同的。我想创建一个基于字段Server的映射,其中包含JsonObject的列表。

"PCF":[{"Server":"PCF","Port":"9878","Calls":"655"}, {"Server":"PCF","Port":"562","Calls":"65"}]

条件:1( 我想使用java8(我已经在旧版本上使用过了(。2( 我正在使用org.json.

我以前没有使用过JSONJava库,但经过一点研究,似乎表明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")));

如果你不转换为JSONObject,那么这将返回:

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.*;

最新更新