无法传输 JSON 数组

Gay*_*hri 1 java 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");
Run Code Online (Sandbox Code Playgroud)

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

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

rxn*_*n1d 6

好吧基本上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)