亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法流式傳輸 JSON 數組

無法流式傳輸 JSON 數組

米琪卡哇伊 2021-12-30 17:20:16
下面是我的代碼:導入是:org.json.JSONArray, org.json.JSONObjectString 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 中關鍵行的值。請說明原因以及如何解決。
查看完整描述

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}]


查看完整回答
反對 回復 2021-12-30
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

您可以使用迭代器進行流轉換:

Stream<String> stream= StreamSupport.stream(
                  arr.spliteratorUnknownSize(list.iterator(), Spliterator.ORDERED),
                  false);

另一種解決方案是使用 java 實現的標準 -javax.json.JsonArray它基本上是一個集合并為您提供一個 stream() 方法


查看完整回答
反對 回復 2021-12-30
  • 2 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號