开发者社区> 问答> 正文

JSONArray中存放ArrayList后,遍历修改原list中数据时,出现的结果与预期不一致

问题描述

JSONArray中存放ArrayList后,遍历修改原list中数据时,出现的结果与预期不一致 代码如下:

JSONObject jo = new JSONObject(); List list = new ArrayList<>(); list.add("a "); jo.put("aa",list); JSONArray ja = jo.getJSONArray("aa"); for (int i = 0; i < ja.size(); i++) { ja.set(i,ja.getString(i).trim()); } System.out.println(jo);

期待的正确结果

{"aa":["a"]}

实际输出结果

{"aa":["a "]}

可见并没有trim成功

附加信息

在fastjson1版本中不存在此情况,在其他json版本下也不存在该情况,不知道是bug还是特性。

原提问者GitHub用户xin-zhang-452600

展开
收起
飘飘斯嘉丽 2023-04-21 11:22:36 169 0
1 条回答
写回答
取消 提交回答
  • fastjson2里, JSONObject和JSONArray不再是内部维护一个Map和List, 而是继承LinkedHashMap和ArrayList

    对于 "aa" => new ArrayList<>(), 在JSONArray ja = jo.getJSONArray("aa"); 实际上过程是获取"aa"得到一个ArrayList, 因为不是JSONArray, 从而创建了一个新的JSONArray 并将"aa"的全部元素放进新的JSONArray

    所以后来对JSONArray ja的写操作是不影响JSONObject jo

    你可以这样

    List list = new JSONArray<>();

    或者

    ArrayList ja = (ArrayList) jo.get("aa"); for (int i = 0; i < ja.size(); i++) { ja.set(i, ja.get(i).trim()); }

    原回答者GitHub用户kraity

    2023-04-21 14:32:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载