JSONObject和JSONArray详解

要使用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);

输出:jsonObject:{"key4":"value4","key2":"value2","key1":"value1"},发现key2被覆盖了



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);

输出:jsonObject:{"key4":"value4","key2":["value2","value2"],"key1":"value1"} ,积累这个value到该key下,如果key存在,则该key的值为数组



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);


你可能感兴趣的:(java工具类)