Json Array具有多个JsonObject Conversion以基于Java8进行映射

时间:2018-12-02 18:52:04

标签: json java-8 org.json

我有多个应用程序,这些应用程序返回具有多个JsonObject的JsonArray 像这样的app1

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我以前没有使用过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")));

如果您不强制转换为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.*;