无法流式传输 JSON 数组

下面是我的代码:


导入是:org.json.JSONArray, org.json.JSONObject


String x="{\"count\":25,\"rows\":[{\"id\":10,\"name\":\"xxx\"},{\"id\":11,\"name\":\"xyx\"}]}";

JSONObject obj=new JSONObject(x);

JSONArray arr=obj.getJSONArray("rows");

实际数据有许多记录,其中包含许多我需要过滤的键值。所以我尝试过,arr.stream()但在编译本身时它显示方法stream()未定义为 type JSONArray。


我使用 java 8.流工作列表。我正在获取 arr 中关键行的值。请说明原因以及如何解决。


米琪卡哇伊
浏览 158回答 2
2回答

白板的微信

那么基本上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)&nbsp; .forEach(System.out::println);出去:{"name":"xxx","id":10}{"name":"xyx","id":11}编辑 1 - 回复评论你提供的代码对我来说非常好。它确实过滤了数组中的所有对象,除了那些具有id==11:List<JSONObject> list = StreamSupport.stream(arr.spliterator(), false)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(val -> (JSONObject) val)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(val -> val.getInt("id") == 11)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());System.out.println(list);出去:[{"name":"xyx","id":11}]

汪汪一只猫

您可以使用迭代器进行流转换:Stream<String>&nbsp;stream=&nbsp;StreamSupport.stream( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr.spliteratorUnknownSize(list.iterator(),&nbsp;Spliterator.ORDERED), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false);另一种解决方案是使用 java 实现的标准 -javax.json.JsonArray它基本上是一个集合并为您提供一个 stream() 方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java