json数组移除元素内容

起因

今天看代码发现为啥人家写的代码没移除某个元素但是元素不存在了呢?
后来发现代码在前面获取了子串移除了某个元素,结果父串也没有该元素了。

现象

原始JSON字符串是这样子的:{"a":{"a1":"va1","a2":"va2"}}

String jsonString = "{\"a\":{\"a1\":\"va1\",\"a2\":\"va2\"}}";
    com.alibaba.fastjson.JSONObject json= com.alibaba.fastjson.JSONObject.parseObject(jsonString);    
    com.alibaba.fastjson.JSONObject aJson = json.getJSONObject("a");
    aJson.remove("a1");
    System.out.println(json.toJSONString());

你觉得上面这段代码输出的结果是怎样的呢?
实际效果是: {"a":{"a2":"va2"}}

解释

fastjson中的JSONObject使用HashMap或者LinkedHashMap来保存json中的键值对的,getObject(String key)其实就是调用map的get(String key)方法,返回的对象是map中的一个引用对象。
说白了就是下面这个问题:

    Map<String, List<String>> map = new HashMap<>();
    List<String> list = new ArrayList<>();
    list.add("1");
    list.add("2");
    list.add("3");
    
    map.put("aa", list);

    List<String> aaList = map.get("aa");
    aaList.remove(0); 

    List<String> aList = map.get("aa");
    aList.forEach(System.out::println);

当修改获取到的对象时候,map中的对象也会发生改变,因此fastjson中的JSONObject中的子串修改会导致父串相应变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值