json與javaObject之間轉換

1.javaBean
public class User implements Serializable{

	private int id;
	private String username;
	private int age;


後面添加set/get方法

2.具體請看代碼(javaBean/list/map--json數據格式之間的轉換)

明白json只有普通數據和數組;而java,javaBean,集合,數組;且看他們之間轉換。


package com.po;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;

/**
 * 快速入門網址:http://json-lib.sourceforge.net/usage.html#arrays
 * @author Caoyi
 *主要有:
 *1.JSONArray.fromObject();
 *2.JSONObject.fromObject();
 *3.	//1.創建JsonConfig對象
		JsonConfig jsonConfig = new JsonConfig(); 
		//2.設置排除的屬性
		jsonConfig.setExcludes(new String[] { "id"});
 */
public class UseJsonrTest {
	
	@Test
	public void test()
	{
		List<User> list = new ArrayList<User>();
		
		User user1 = new User(1,"sha",16);
		User user2 = new User(2,"sha",16);
		User user3 = new User(3,"sha",16);
		
		list.add(user1);
		list.add(user2);
		list.add(user3);
		
		//將java對象轉爲json
		//比較兩者不同的輸出
		//System.out.println(JSONSerializer.toJSON(list).toString());
		/****************************************************/
//		JSONObject  jsonObject1 = JSONObject.fromObject(list);
//		System.out.println("****" + jsonObject1);
		
		JSONArray jsonArray = JSONArray.fromObject( list ); 
		//System.out.println(jsonArray.size());
		System.out.println(jsonArray.toString());
		JSONArray jsonArray2 =JSONArray.fromObject(jsonArray);
		
		//將json轉爲java對象
		List<User> list1 = new ArrayList<User>();
		
		for (int i = 0; i < jsonArray2.size(); i++) {
			   Object o = jsonArray2.get(i);
			   JSONObject jsonObject = JSONObject.fromObject(o);
			   User Person = (User) JSONObject.toBean(jsonObject, User.class);
			   list1.add(Person);
			   System.out.println(Person.getUsername());
			}
		System.out.println(list1);

		
	}
	/**
	 * 將json轉換爲java對象
	 */
	@Test
	public void jsonToObject()
	{
		String son = "{'id':'9','username':'aa','age':'66'}";
		
		//第一步,將jsonData字符串轉爲jsonObject
		JSONObject jsonObject = JSONObject.fromObject( son );
		//User user = (User)JSONObject.fromObject( son );//(報錯)不能直接將jsonObject強轉爲java對象
		//第二步,將jsonObject轉爲java對象
		User bean = (User) JSONObject.toBean( jsonObject, User.class ); //注意參數
		
		System.out.println(bean.toString());
		System.out.println(bean.getUsername());
		
		/*************************/
		//報錯,JSONArray必須的是jsonData帶有“[]”;
//		JSONArray  jsonArray = JSONArray.fromObject(son);
//		System.out.println("jsonArray:" + jsonArray);
		

	}

	
	/**
	 * map集合轉json
	 */
	@Test
	public void  mapToJson()
	{
		Map<String,String> map = new HashMap<String,String>();
		//注意,集合中key的唯一性
		map.put("i", "001");
		map.put("id", "002");
		
		/*
		 * 比較下面兩種方法的結果
		 */
		JSONObject  jsonObject = JSONObject.fromObject(map);
		System.out.println(jsonObject.toString());
		
		JSONArray jsonArray = JSONArray.fromObject(map);
		System.out.println(jsonArray);
		
		/*
		 * JSONArray比JSONObject多了“[]”
		 * 對比與List集合(見下)
		 * map集合可以使用兩種轉換方法,一種直接轉換,另一種直接轉爲json數組
		 * 爲什麼呢?
		 * 從json數據結構說起,json中就兩種數據類型,用官網上的話說,一種是無序的,另一種是有序的
		 * java轉json中,除了list必須轉爲有序,別的既可以有序也可以無序
		 * 其實上面那句是扯淡,map轉換爲有序,那{[map]},數組中也就一個元素,毛有序
		 * 真正要理解:從集合的思維理解
		 * list中有多個元素,而這每個元素又有多個屬性(直白點,類比於二級目錄)
		 */
		
	}
	
	/**
	 * list轉json
	 */
	@Test
	public void listToJson()
	{
		//數據模擬
		List<User> list = new ArrayList<User>();
		
		User user1 = new User(1,"sha",16);
		User user2 = new User(2,"sha",16);
		User user3 = new User(3,"sha",16);
		
		list.add(user1);
		list.add(user2);
		list.add(user3);
		
//		報錯()
//		JSONObject  jsonObject1 = JSONObject.fromObject(list);
//		System.out.println("****" + jsonObject1);
		
		JSONArray jsonArray = JSONArray.fromObject( list ); 
		System.out.println(jsonArray.toString());
		//輸出:[{"age":16,"id":1,"username":"sha"},{"age":16,"id":2,"username":"sha"},{"age":16,"id":3,"username":"sha"}]
		//注意了,輸出時“屬性名”:“值”---------原因:後臺自己解析了UserBean
		
		/******************************************************************************/
		/*
		 * json數組轉list
		 * 注意了:
		 * 1.json轉list和list轉json使用的是一個方法JSONArray.fromObject(很奇葩的一個方法,正反一樣)
		 * (內部原理是毛,反正我查了好久,沒有找出來)
		 * 2.json先轉爲JSONArray,必須的遍歷,再JSONObject取值
		 */
		JSONArray jsonArray2 =JSONArray.fromObject(jsonArray);
		List<User> list1 = new ArrayList<User>();
		for (int i = 0; i < jsonArray2.size(); i++)
		{
			   Object o = jsonArray2.get(i);
			   JSONObject jsonObject = JSONObject.fromObject(o);
			   User Person = (User) JSONObject.toBean(jsonObject, User.class);
			   list1.add(Person);
			   System.out.println(Person.getUsername());
		}
		System.out.println(list1);

		
	}
	@Test
	public void jsonArrayToObjects()
	{
		String jsonData ="[{'id':'9','username':'aa','age':'66'},{'id':'10','username':'bb','age':'66'}]";
		JSONArray jsonArray = JSONArray.fromObject(jsonData);
		//System.out.println(jsonArray.toString());
		List<User> list = new ArrayList<User>();
		
		for (int i = 0; i < jsonArray.size(); i++) {
			   Object o = jsonArray.get(i);
			   JSONObject jsonObject = JSONObject.fromObject(o);
			   User Person = (User) JSONObject.toBean(jsonObject, User.class);
			   list.add(Person);
			}
		System.out.println(list);

	}
	/**
	 * 從數據中減去不需要穿的屬性
	 */
	@Test
	public void jsonTest()
	{
		//數據模擬
		List<User> list = new ArrayList<User>();
		
		User user1 = new User(1,"sha",16);
		User user2 = new User(2,"sha",16);
		User user3 = new User(3,"sha",16);
		
		list.add(user1);
		list.add(user2);
		list.add(user3);
		
		//核心代碼
		//1.創建JsonConfig對象
		JsonConfig jsonConfig = new JsonConfig(); 
		//2.設置排除的屬性
		jsonConfig.setExcludes(new String[] { "id"});
		//3.轉換
		JSONArray jsonArray = JSONArray.fromObject( list ,jsonConfig); 
		System.out.println(jsonArray);
	}
	
	@Test
	public void jsonTest2()
	{
		//數據模擬
		 Map map = new HashMap();  
		 map.put("name", "json");  
		 map.put("class", "ddd");  
		 map.put("id","111");
		 map.put("idd","222");
		 JsonConfig config = new JsonConfig();  
		// config.setIgnoreDefaultExcludes(true);  //默認爲false,即過濾默認的key  
		 JSONObject jsonObject = JSONObject.fromObject(map,config);  
		 System.out.println(jsonObject);  
		 /*
		  * 不知默認排除的是什麼東東
		  */

	}
	
	
	

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章