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() 方法
添加回答
舉報