2 回答
TA贡献1883条经验 获得超3个赞
那么基本上org.json.JSONArray不是这样的数组。它只是一个表示 JSON 数组的类(是的,听起来很奇怪),它是[].
好消息是它实现了Iterable. 所以你可以得到这样的流:
String x="{\"count\":25,\"rows\":[{\"id\":10,\"name\":\"xxx\"},
{\"id\":11,\"name\":\"xyx\"}]}";
JSONObject obj = new JSONObject(x);
JSONArray arr= obj.getJSONArray("rows");
StreamSupport.stream(arr.spliterator(), false)
.forEach(System.out::println);
出去:
{"name":"xxx","id":10}
{"name":"xyx","id":11}
编辑 1 - 回复评论
你提供的代码对我来说非常好。它确实过滤了数组中的所有对象,除了那些具有id==11:
List<JSONObject> list = StreamSupport.stream(arr.spliterator(), false)
.map(val -> (JSONObject) val)
.filter(val -> val.getInt("id") == 11)
.collect(Collectors.toList());
System.out.println(list);
出去:
[{"name":"xyx","id":11}]
TA贡献1898条经验 获得超8个赞
您可以使用迭代器进行流转换:
Stream<String> stream= StreamSupport.stream( arr.spliteratorUnknownSize(list.iterator(), Spliterator.ORDERED), false);
另一种解决方案是使用 java 实现的标准 -javax.json.JsonArray
它基本上是一个集合并为您提供一个 stream() 方法
添加回答
举报