Java中JSON字符串與java對象的交換實例詳解。本站提示廣大學習愛好者:(Java中JSON字符串與java對象的交換實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中JSON字符串與java對象的交換實例詳解正文
在開辟進程中,常常須要和其余體系交流數據,數據交流的格局有XML、JSON等,JSON作為一個輕量級的數據格局比xml效力要高,XML須要許多的標簽,這無疑占領了收集流量,JSON在這方面則做的很好,上面先看下JSON的格局,
JSON可以有兩種格局,一種是對象格局的,另外一種是數組對象,
{"name":"JSON","address":"北京市西城區","age":25}//JSON的對象格局的字符串
[{"name":"JSON","address":"北京市西城區","age":25}]//數據對象格局
從下面的兩種格局可以看出對象格局和數組對象格局獨一的分歧則是在對象格局的基本上加上了[],再來看詳細的構造,可以看出都是以鍵值對的情勢湧現的,中央以英文狀況下的逗號(,)分隔。
在前端和後端停止數據傳輸的時刻這類格局也是很受迎接的,後端前往json格局的字符串,前台應用js中的JSON.parse()辦法把JSON字符串解析為json對象,然落後行遍歷,供前端應用。
上面進入正題,引見在JAVA中JSON和java對象之間的互轉。
要想完成JSON和java對象之間的互轉,須要借助第三方jar包,這裡應用json-lib這個jar包,下載地址為:https://sourceforge.net/projects/json-lib/,json-lib須要commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar五個包的支撐,可以自行從網高低載,這裡不再貼出下載地址。
json-lib供給了幾個類可以完成此功效,例,JSONObject、JSONArray。從類的名字上可以看出JSONObject轉化的應當是對象格局的,而JSONArray轉化的則應當是數組對象(即,帶[]情勢)的。
1、java通俗對象和json字符串的互轉
java對象--》》字符串
java通俗對象指的是java中的一個java bean,即一個實體類,如,
package com.cn.study.day3; public class Student { //姓名 private String name; //年紀 private String age; //住址 private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", address=" + address + "]"; } }
下面是我的一個通俗的java實體類,看json-lib若何把它轉化為字符串情勢,
public static void convertObject() { Student stu=new Student(); stu.setName("JSON"); stu.setAge("23"); stu.setAddress("北京市西城區"); //1、應用JSONObject JSONObject json = JSONObject.fromObject(stu); //2、應用JSONArray JSONArray array=JSONArray.fromObject(stu); String strJson=json.toString(); String strArray=array.toString(); System.out.println("strJson:"+strJson); System.out.println("strArray:"+strArray); }
我界說了一個Student的實體類,然後分離應用了JSONObject和JSONArray兩種方法轉化為JSON字符串,上面看打印的成果,
strJson:{"address":"北京市西城區","age":"23","name":"JSON"}
strArray:[{"address":"北京市西城區","age":"23","name":"JSON"}]
從成果中可以看出兩種辦法都可以把java對象轉化為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輕松取得。
2、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),如許便可以獲得轉化後的對象。
3、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=中國上海]
上面是MyBean的代碼,
package com.cn.study.day4; import java.util.Map; import com.cn.study.day3.Student; public class MyBean { private Student first; public Student getFirst() { return first; } public void setFirst(Student first) { this.first = first; } }
應用toBean()辦法是傳入了三個參數,第一個是JSONObject對象,第二個是MyBean.class,第三個是一個Map對象。經由過程MyBean可以曉得此類中要有一個first的屬性,且其類型為Student,要和map中的鍵和值類型對應,即,first對應鍵 first類型對應值的類型。
以上所述是小編給年夜家引見的JSON字符串與java對象的互相轉換實例詳解,願望對年夜家有所贊助!