最近刚开始用json-lib操作json,但遇到一个问题:
先说说为JSONObject添加属性的3个方法的官方解释:
public Object put (Object key, Object value):
——将value映射到key下。如果此JSONObject对象之前存在一个value在这个key下,当前的value会替换掉之前的value。
public JSONObject accumulate (String key, Object value):
——累积value到这个key下。这个方法同element()方法类似,特殊的是,如果当前已经存在一个value在这个key下那么一个JSONArray将会存储在这个key下来保存所有累积的value。如果已经存在一个JSONArray,那么当前的value就会添加到这个JSONArray中。
public JSONObject element (String key, Object value):
——将键/值对放到这个JSONObject对象里面。如果当前value为空(null),那么如果这个key存在的话,这个key就会移除掉。如果这个key之前有value值,那么此方法会调用accumulate()方法。
但经过我测试,put 和 accumulate 方法作用与官方描述一致,但对于element方法却有出入,element 的作用与 put 方法一模一样。
上代码:
先测试 put 方法
JSONObject jo = new JSONObject();
jo.put("str" , "123");
System.out.println(jo);
//输出:{"str":"123"}
JSONObject jo = new JSONObject();
jo.put("str" , "123");
jo.put("str" , "321");
System.out.println(jo);
//输出:{"str":"321"}
//说明被替换
JSONObject jo = new JSONObject();
jo.put("str" , "123");
jo.put("str" , null);
System.out.println(jo);
//输出:{}
//说明put方法会排斥空元素,这点官方并没有说明
再测试 accumulate 方法
JSONObject jo = new JSONObject();
jo.accumulate("strs" , null);
System.out.println(jo);
//输出:{"strs":null}
//说明 accumulate 不会移除空元素
//继续
jo.accumulate("strs" , "123");
System.out.println(jo);
//输出:{"strs":[null,"123"]}
//与官方说明一致
最后测试下 element 方法
JSONObject jo = new JSONObject();
jo.element("strs", null);
System.out.println(jo);
//输出:{}
//说明会排斥值为null的属性,这点与官方描述和 put 方法一致
JSONObject jo = new JSONObject();
jo.element("strs", "123");
jo.element("strs", "123");
System.out.println(jo);
//输出:{"strs":"321"}
//这里貌似并没有调用 accumulate 方法,而是和 put 方法如出一辙,都是替换,谁知道为什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。