Json字串與java物件的互轉
阿新 • • 發佈:2019-01-26
strJson:{"address":"北京市西城區","age":"23","name":"JSON"} strArray:[{"address":"北京市西城區","age":"23","name":"JSON"}]
JSON字串--》》java物件
上面說明了如何把java物件轉化為JSON字串,下面看如何把JSON字串格式轉化為java物件,
首先需要定義兩種不同格式的字串,需要使用\對雙引號進行轉義,
public static void jsonStrToJava(){ //定義兩種不同格式的字串 String objectStr="{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城區\"}"; String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城區\"}]"; //1、使用JSONObject JSONObject jsonObject=JSONObject.fromObject(objectStr); Student stu=(Student)JSONObject.toBean(jsonObject, Student.class); //2、使用JSONArray JSONArray jsonArray=JSONArray.fromObject(arrayStr); //獲得jsonArray的第一個元素 Object o=jsonArray.get(0); JSONObject jsonObject2=JSONObject.fromObject(o); Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class); System.out.println("stu:"+stu); System.out.println("stu2:"+stu2); }
列印結果為:
stu:Student [name=JSON, age=24, address=北京市西城區] stu2:Student [name=JSON, age=24, address=北京市西城區]
從上面的程式碼中可以看出,使用JSONObject可以輕鬆的把JSON格式的字串轉化為java物件,但是使用JSONArray就沒那麼容易了,因為它有“[]”符號,所以我們這裡在獲得了JSONArray的物件之後,取其第一個元素即我們需要的一個student的變形,然後使用JSONObject輕鬆獲得。
二、list和json字串的互轉
list--》》json字串
public static void listToJSON(){ Student stu=new Student(); stu.setName("JSON"); stu.setAge("23"); stu.setAddress("北京市海淀區"); List<Student> lists=new ArrayList<Student>(); lists.add(stu); //1、使用JSONObject //JSONObject listObject=JSONObject.fromObject(lists); //2、使用JSONArray JSONArray listArray=JSONArray.fromObject(lists); //System.out.println("listObject:"+listObject.toString()); System.out.println("listArray:"+listArray.toString()); }
我把使用JSONObject的方式給注掉了,我們先看註釋之前的結果,
Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
告訴我說有一個異常,通過檢視原始碼發現,在使用fromObject方法的時候會先進行引數型別的判斷,這裡就告訴我們,傳入的引數是一個array型別,因為使用的ArrayList,再來看,註釋之後的結果,
listArray:[{"address":"北京市海淀區","age":"23","name":"JSON"}]
這樣結果是正常的。
json字串--》》list
從上面的例子可以看出list的物件只能轉化為陣列物件的格式,那麼我們看下面的字串到list的轉化,
public static void jsonToList(){ String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城區\"}]"; //轉化為list List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class); for (Student stu : list2) { System.out.println(stu); } //轉化為陣列 Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class); for (Student student : ss) { System.out.println(student); } }
列印結果,
Student [name=JSON, age=24, address=北京市西城區] Student [name=JSON, age=24, address=北京市西城區]
由於字串的格式為帶有“[]”的格式,所以這裡選擇JSONArray這個物件,它有toArray、toList方法可供使用,前者轉化為java中的陣列,或者轉化為java中的list,由於這裡有實體類進行對應,所以在使用時指定了泛型的型別(Student.class),這樣就可以得到轉化後的物件。
三、map和json字串的互轉
map--》》json字串
public static void mapToJSON(){ Student stu=new Student(); stu.setName("JSON"); stu.setAge("23"); stu.setAddress("中國上海"); Map<String,Student> map=new HashMap<String,Student>(); map.put("first", stu); //1、JSONObject JSONObject mapObject=JSONObject.fromObject(map); System.out.println("mapObject"+mapObject.toString()); //2、JSONArray JSONArray mapArray=JSONArray.fromObject(map); System.out.println("mapArray:"+mapArray.toString()); }
列印結果,
mapObject{"first":{"address":"中國上海","age":"23","name":"JSON"}} mapArray:[{"first":{"address":"中國上海","age":"23","name":"JSON"}}]
上面列印了兩種形式。
json字串--》》map
JSON字串不能直接轉化為map物件,要想取得map中的鍵對應的值需要別的方式,
public static void jsonToMap(){ String strObject="{\"first\":{\"address\":\"中國上海\",\"age\":\"23\",\"name\":\"JSON\"}}"; //JSONObject JSONObject jsonObject=JSONObject.fromObject(strObject); Map map=new HashMap(); map.put("first", Student.class);
//使用了toBean方法,需要三個引數
MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map); System.out.println(my.getFirst()); }
列印結果,
Student [name=JSON, age=23, address=中國上海]