开发者社区> 问答> 正文

json-lib 操作 json 时 element 方法的问题。

最近刚开始用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 方法如出一辙,都是替换,谁知道为什么?

展开
收起
杨冬芳 2016-07-05 17:49:08 2224 0
1 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

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