解析JSON对象的多个字段,并使用java 8集合和流添加到列表中

时间:2017-08-14 10:03:01

标签: java json arraylist collections java-stream

我调用REST端点,并将JSON对象作为String返回。然后我将String解析为Object

final Object parse = JSONValue.parse(body);

我检查对象是否是JSONArray的实例,并将对象的选定元素添加到列表中。

 if (parse instanceof JSONArray) {
        ((JSONArray) parse).stream().collect(Collectors.toList()).forEach(o -> list.add((String) ((JSONObject) o).get("id")));
        ((JSONArray) parse).stream().collect(Collectors.toList()).forEach(o -> list.add((String) ((JSONObject) o).get("uri")));
    }

截至目前,我首先添加了所有"id"字段,然后添加了所有"uri"字段。在我的列表中,我目前有34个ID,其次是34个uris。我想让每个id后跟相应的uri。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:3)

首先,您应该使用collect,而不是forEach

现在,要使每个id后跟相应的uri,您可以使用flatMap

List<String> list = 
    ((JSONArray) parse).stream()
                       .flatMap(o->Stream.of((String) ((JSONObject) o).get("id"),(String) ((JSONObject) o).get("uri")))
                       .collect(Collectors.toList());

答案 1 :(得分:1)

我没有测试过,但这应该有用。

List<Object> result;
if (parse instanceof JSONArray) {
     result = ((JSONArray) parse).stream()
        .flatMap(o -> Stream.of(o.get("id"), o.get("uri")))
        .collect(Collectors.toList());
}

编辑: 或者更确切地说是伊兰在几分钟之前发布他包括适当的演员。