Java之json和物件之間的相互轉換
阿新 • • 發佈:2019-01-28
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轉換物件操作就可以實現物件的解析操作,既省事又省力。