天天看點

Java中将JSON格式的資料轉換成對應的Bean、Map、List資料

原文位址為: Java中将JSON格式的資料轉換成對應的Bean、Map、List資料

簡單說明:

為了友善資料在用戶端及伺服器端的傳輸,有時候我們會用一些比較友善組織的資料類型,比如json、xml等傳給用戶端,用戶端也可以重新組織資料傳回伺服器端。JSON和XML提供了一套比較友善的資料組織形式。。并且有很多現成的類庫用于解析這些資料。。

本文是對net.sf.json使用後的總結。。目前官方開源的對json進行處理的項目很多,fastjson還有其它等等。。視自己處理問題的複雜程度考慮選擇使用不同的依賴包。。

如果使用maven建構項目,需要對以下兩個包進行依賴

<dependency>
	<groupId>net.sf.json-lib</groupId>
	<artifactId>json-lib</artifactId>
	<version>2.2.3</version>
</dependency>
<dependency>
	<groupId>xom</groupId>
	<artifactId>xom</artifactId>
	<version>1.2.5</version>
</dependency>
           

如果使用Eclipse自己建構項目,需要自己手動下載下傳依賴包進行依賴。

示例程式:

1.将JSON組裝的實體資料類型轉換為Java中對應的簡單Bean對象(隻包含簡單的資料類型)

/**
 * 将json格式封裝的簡單實體類型資料轉換成簡單類型的javabean
 * @return
 */
private static Object JSON2SimpleBean() {
	String jsonStr = "{\"age\":23,\"id\":123,\"name\":\"tt_2009\"," +
			"\"province\":\"上海\",\"sex\":\"男\"}";
	JSONObject jsonBean = JSONObject.fromObject(jsonStr);
	return JSONObject.toBean(jsonBean, SimpleUser.class);
}
           

以上代碼是将Json資料串轉換成java中自定義的對應的簡單bean。SimpleUser看最後代碼附錄。

2.将JSON組裝的複雜資料轉換成複雜的java資料實體(對象中包含其它複雜對象,如收貨位址用List存儲)

/**
 * 将json格式封裝的複雜實體資料轉換成複雜類型的javabean
 * @return
 */
private static Object JSON2ComplexBean() {
	String jsonStr = "{\"address\":[\"北京\",\"上海\",\"廣州\"]," +
			"\"age\":23,\"id\":123,\"name\":\"tt_2009\",\"province\":\"上海\",\"sex\":\"男\"}";
	JSONObject jsonBean = JSONObject.fromObject(jsonStr);
	return JSONObject.toBean(jsonBean, ComplexUser.class);
}
           

以上代碼将json組裝的資料串轉換成java中自定義的複雜資料實體。ComplexUser看最後附錄代碼。

3.将Json資料轉換成java中的List

/**
 * 将json格式封裝的清單資料轉換成java的List資料
 * @return
 */
private static Object JSON2List() {
	String jsonArray =
			"[{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}," +
			"{\"age\":24,\"id\":123,\"name\":\"tt_2009_1\",\"province\":\"上海\",\"sex\":\"男\"}," +
			"{\"age\":32,\"id\":123,\"name\":\"tt_2009_9\",\"province\":\"上海\",\"sex\":\"男\"}]";

	return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());
}
           

以上代碼将json組裝的資料資料轉換成java中的list資料。對更複雜的資料處理,後續文章介紹,比如處理日期等格式的資料。

4.将json資料轉換成java中的Map。(注意key隻能是字元串)

/**
 * 将json格式封裝的字元串資料轉換成java中的Map資料
 * @return
 */
private static Map<String, SimpleUser> JSON2Map() {
	Map<String, SimpleUser> map = new HashMap<String, SimpleUser>();
	String jsonMapStr =
			"{\"tt_2009_4\":{\"age\":27,\"id\":123,\"name\":\"tt_2009_4\",\"province\":\"上海\",\"sex\":\"男\"}," +
			"\"tt_2009_6\":{\"age\":29,\"id\":123,\"name\":\"tt_2009_6\",\"province\":\"上海\",\"sex\":\"男\"}," +
			"\"tt_2009_0\":{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}}";
	JSONObject jsonMap = JSONObject.fromObject(jsonMapStr);
	Iterator<String> it = jsonMap.keys();
	while(it.hasNext()) {
		String key = (String) it.next();
		SimpleUser u = (SimpleUser) JSONObject.toBean(
				JSONObject.fromObject(jsonMap.get(key)),
				SimpleUser.class);
		map.put(key, u);
	}
	return map;
}
           

以上實作的是将json組裝的key-value格式的資料轉換成java中的map。

附錄代碼:

(setter、getter等方法省略掉了)

/**
 * 隻包含基本資料類型的簡單實體類
 * @author TT_2009
 */
public class SimpleUser {

	private int id;

	private String name;

	private String sex;

	private int age;

	private String province;

}
           
/**
 * 包含複雜類型的實體類
 * @author TT_2009
 */
public class ComplexUser extends SimpleUser {

	private List<String> address;

	public ComplexUser() {
	}

	public ComplexUser(int id, String name,
			String sex, int age, String province,
			List<String> address) {
		super(id, name, sex, age, province);
		this.address = address;
	}

	public List<String> getAddress() {
		return address;
	}

	public void setAddress(List<String> address) {
		this.address = address;
	}

}
           

轉載請注明本文位址: Java中将JSON格式的資料轉換成對應的Bean、Map、List資料