下面是我的代码:
导入有: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");
Run Code Online (Sandbox Code Playgroud)
实际数据有许多记录,其中有许多我需要过滤的键值。所以我尝试了arr.stream(),但在编译本身上它显示方法stream()未定义类型JSONArray。
我使用 java 8。流适用于列表。我正在获取 arr 中关键行的值。请说明原因以及如何解决。
好吧基本上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);
Run Code Online (Sandbox Code Playgroud)
出去:
{"name":"xxx","id":10}
{"name":"xyx","id":11}
Run Code Online (Sandbox Code Playgroud)
编辑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);
Run Code Online (Sandbox Code Playgroud)
出去:
[{"name":"xyx","id":11}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12559 次 |
| 最近记录: |