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

http://www.cnblogs.com/sunzn/archive/2013/02/12/2910241.html