1. 程式人生 > >Java之json和物件之間的相互轉換

Java之json和物件之間的相互轉換

json使用前必須先引入json的相關jar包,我這裡用的是json-lib-2.4-jdk15.jar這個版本的jar包。如果大家沒有的話可以直接在我這裡下載:點選開啟連結

匯入完jar就可以正式開始開發了,這裡先看一個物件轉json的例子:

物件的具體內容如下:

package myapi.json.demo.entity;
import java.util.List;
public class MyBean {
	private String Id;
	private String Name;
	private List CardNum;
	public MyBean(String id, String name, List cardNum) {
		super();
		Id = id;
		Name = name;
		CardNum = cardNum;
	}
	
	public MyBean() {
		super();
	}

	public String getId() {
		return Id;
	}
	public void setId(String id) {
		Id = id;
	}
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public List getCardNum() {
		return CardNum;
	}
	public void setCardNum(List cardNum) {
		CardNum = cardNum;
	}
	
}
轉換的關鍵程式碼如下所示:
package myapi.json.demo;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import myapi.json.demo.entity.MyBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonApi {
	public static void main(String[] args) throws Exception {
		List<MyBean> myBeanList = new ArrayList<MyBean>();
		List<String> cardNum1 = new ArrayList<String>();
		cardNum1.add("number1");
		cardNum1.add("number2");
		cardNum1.add("number3");
		cardNum1.add("number4");
		MyBean myBean1=new MyBean("number-1", "test-1", cardNum1);
		List<String> cardNum2 = new ArrayList<String>();
		cardNum2.add("number1");
		cardNum2.add("number2");
		cardNum2.add("number3");
		cardNum2.add("number4");
		MyBean myBean2=new MyBean("number-2", "test-2", cardNum2);
		myBeanList.add(myBean1);
		myBeanList.add(myBean2);
		JSONArray jsonArray=new JSONArray().fromObject(myBeanList);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("key", jsonArray);
		System.out.println(jsonObject);
	}
}


執行結果如下:
{"key":[{"cardNum":["number1","number2","number3","number4"],"id":"number-1","name":"test-1"},
{"cardNum":["number1","number2","number3","number4"],"id":"number-2","name":"test-2"}]}


這裡需要注意的是JSONObject中必須是類似於map中key+value的型別,而JSONArray中必須是類似於list中的類似。

下面是json轉物件的例子:

package myapi.json.demo;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import myapi.json.demo.entity.MyBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonApi {
	public static void main(String[] args) throws Exception {
		List<MyBean> myBeanList = new ArrayList<MyBean>();
		List<String> cardNum1 = new ArrayList<String>();
		cardNum1.add("number1");
		cardNum1.add("number2");
		cardNum1.add("number3");
		cardNum1.add("number4");
		MyBean myBean1=new MyBean("number-1", "test-1", cardNum1);
		List<String> cardNum2 = new ArrayList<String>();
		cardNum2.add("number1");
		cardNum2.add("number2");
		cardNum2.add("number3");
		cardNum2.add("number4");
		MyBean myBean2=new MyBean("number-2", "test-2", cardNum2);
		myBeanList.add(myBean1);
		myBeanList.add(myBean2);
		JSONArray jsonArray=new JSONArray().fromObject(myBeanList);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("key", jsonArray);
		JSONArray arrayResult=jsonObject.getJSONArray("key");
		for(int i=0;i<arrayResult.size();i++){
			 JSONObject jsonResult = arrayResult.getJSONObject(i);  
			 MyBean myBeanResult= (MyBean)JSONObject.toBean(jsonResult, MyBean.class);  
			 System.out.println(myBeanResult.getName());
		}
	}
}


執行結果如下:
test-1
test-2
這裡需要注意的是:只有JSONOBject中才有toBean的方法,所以想要把JSONArray中的list資料一一對應到物件中,只能先把JSOnArray物件轉換為JSONObject才可以。

這裡介紹的是最基本的json轉物件的方法,關於如何建立json其實很簡單,大部分其實都是map,list,陣列,物件等進行混合組裝成json資料,對於這種混合型的解析一般都是根據具體資料進行具體解析。當然最好的方式其實就是伺服器通過物件直接轉換為json資料,客戶端通過編寫相同的物件實體類,直接進行json轉換物件操作就可以實現物件的解析操作,既省事又省力。