要使用JSONObject和JSONArray必须添加如下jar包,缺一不可:
commons-beanutils.jar
commons-collections.jar
commons-lang.jar
commons-logging.jar
ezmorph.jar
json-lib.jar
public class JSONtest {
public static void main(String args[]){
//创建一个JSONObject对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("key1", "value1");
jsonObject.put("key2", "value2");
jsonObject.put("key3", "value3");
jsonObject.put("key4", "value4");
System.out.println("jsonObject:"+jsonObject);
//创建一个JSONArray对象
JSONArray jsonArray=new JSONArray();
jsonArray.add("value1");
jsonArray.add("value2");
jsonArray.add("value3");
jsonArray.add("value4");
System.out.println("jsonArray:"+jsonArray);
//Map转成JSONObject
Map map=new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
System.out.println("jsonObject2:"+JSONObject.fromObject(map));
//List转成JsonArray
List list=new ArrayList();
list.add("value1");
list.add("value2");
list.add("value3");
System.out.println("jsonArray2:"+JSONArray.fromObject(list));
//JsonArray解析map,会将整个json对象放进数组。
System.out.println("jsonArray from map:"+JSONArray.fromObject(map));
//将JSONObject放入JsonArray
JSONObject jsonObject3=new JSONObject();
jsonObject3.put("姓名", "张三");
jsonObject3.put("年龄", "13");
jsonObject3.put("身高", "166");
System.out.println("将JSONObject放入JsonArray:"+JSONArray.fromObject(jsonObject3));
}
}
jsonObject:{"key4":"value4","key3":"value3","key2":"value2","key1":"value1"}
jsonArray:["value1","value2","value3","value4"]
jsonObject2:{"key4":"value4","key3":"value3","key2":"value2","key1":"value1"}
jsonArray2:["value1","value2","value3"]
jsonArray from map:[{"key4":"value4","key3":"value3","key2":"value2","key1":"value1"}]
将JSONObject放入JsonArray:[{"姓名":"张三","身高":"166","年龄":"13"}]
下面总结put,accumulate,element的区别:
public Object put (Object key, Object value) 将value映射到key下。如果此JSONObject对象之前存在一个value在这个key下,当前的value会替换掉之前的value
JSONObject jsonObject = new JSONObject();
jsonObject.put("key1", "value1");
jsonObject.put("key2", "value2");
jsonObject.put("key2", "value2");
jsonObject.put("key4", "value4");
System.out.println("jsonObject:"+jsonObject);
public JSONObject accumulate (String key, Object value) 累积value到这个key下。这个方法同element()方法类似,特殊的是,如果当前已经存在一个value在这个key下那么一个JSONArray将会存储在这个key下来保存所有累积的value。如果已经存在一个JSONArray,那么当前的value就会添加到这个JSONArray中。相比之下replace方法会替代先前的value,代码如下
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("key1", "value1");
jsonObject.accumulate("key2", "value2");
jsonObject.accumulate("key2", "value2");
jsonObject.accumulate("key4", "value4");
System.out.println("jsonObject:"+jsonObject);
public JSONObject element (String key, Object value) 将键/值对放到这个JSONObject对象里面。那么如果这个key存在,当前value为空(null),这个key就会移除掉。如果这个key之前有value值,那么此方法会调用accumulate()方法。这个是官方文档的说法,但是通过做实验发现并没有调用accumulate()方法,如果key重复,则直接覆盖。代码如下:
JSONObject jsonObject = new JSONObject();
jsonObject.element("key1", "value1");
jsonObject.element("key2", "value2");
jsonObject.element("key2", "value2");
jsonObject.element("key2", "value4");
System.out.println("jsonObject:"+jsonObject);
输出:jsonObject:{"key2":"value4","key1":"value1"},key被覆盖,并没有累积。
真是项目中的代码:
JSONArray jsonArray=new JSONArray();
for (String temp : uniqueSet) {
JSONObject json=new JSONObject();
json.accumulate("saccount", temp);
json.accumulate("num",Collections.frequency(cardNumList, temp));
jsonArray.element(json);
}
System.out.println(jsonArray);
response.getWriter().print(jsonArray);