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

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

將包含 JSON 數組的 JSONArray 對象解析為 JSON 數組列表

將包含 JSON 數組的 JSONArray 對象解析為 JSON 數組列表

婷婷同學_ 2023-07-19 16:11:27
我正在使用包含 JSON 數組的 PrimeFaces JSONArray 對象,例如(簡化)[['james', 12, 2019], ['sarah', 29, 2015], ['robert', 15, 2011]]作為靜態構建方法的輸入,該方法在嵌套數組的字段上運行以構造表示其數據的 POJO。我在實體類和實體容器類中使用靜態構建方法來實現這一點(后者只是解析 JSON 并調用前一個構建方法來構造每個實體)。這對于粗略的 for 循環來說效果很好:public static MyContainer buildContainer(JSONArray json) {    MyContainer list = new MyContainer ();    for (int i = 0; i < json.length(); i++) {        MyEntity ent = MyEntity.buildEntity(json, i);        list.add(ent);    }    return list;}但我想要一種更優雅的解決方案,特別是使用函數式方法的解決方案(如果沒有更好的理由,可以提高我對函數式 Java 的了解)。我使用 Jackson 將表示完整數據集的 JSONArray 解析為 JSONArray 數組(即a JSONArray[])。然后可以將該數組轉換為列表,這樣可以更輕松地進行功能操作。這是我最初嘗試寫下我的想法,這可能表明了對 Jackson 和函數式 Java 的一些基本誤解:public static MyContainer buildContainer(JSONArray json) {    ObjectMapper mapper = new ObjectMapper();    try {        JSONArray[] jaArr = mapper.readValue(json.toString(), JSONArray[].class);        List<JSONArray> jaList = Arrays.asList(jaArr);        MyContainer list = (MyContainer) (List<MyEntity>) Arrays.asList(json)                .stream()                .map(MyEntity::buildEntity)                .collect(Collectors.toList());        return list;    } catch (JsonProcessingException ex) {        return null;    }}Netbeans 并不表明這有什么問題,并且不存在編譯時問題。然而,在運行時,我得到了異常Severe:   com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of org.primefaces.json.JSONArray out of START_ARRAY token.所以,我的問題是,當輸入采用上面所示的格式時,為什么會出現此異常,以及是否有比將 JSONArray 序列化為字符串然后將其讀回為 JSONArray[] 更優雅的解決方案 – 即我可以嗎將我的初始 JSONArray 更直接地轉換為允許.stream()或.forEach()?
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

JSONArray在7.0版本中實現了Iterable,所以你可以這樣做:

StreamSupport
??.stream(iterable.spliterator(),?false)
??.map(MyEntity::buildEntity)
??.collect(Collectors.toList());
查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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