zoukankan      html  css  js  c++  java
  • JSONObject移除元素——子串移除,父串也会移除

    起因

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

    现象

    原始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中的子串修改会导致父串相应变化。

  • 相关阅读:
    刚开发的游戏《天黑请闭眼》
    用手机控制服务器
    专业网站打包/解包asp工具(E文精装版本)!
    令我爱慕的女子(转自7di.net)
    8088 汇编速查手册
    Asp调用函数是否会影响性能?
    文档管理器
    ubuntu install xxx.deb
    Java线程池的原理及几类线程池的介绍
    ubuntu download file path
  • 原文地址:https://www.cnblogs.com/Lenbrother/p/12172670.html
Copyright © 2011-2022 走看看