fastjson: json對象,json對象數組,javabean對象,json字元串之間的相互轉化
fastjson: json對象,json對象數組,javabean對象,json字元串之間的相互轉化
在開發過程中,經常需要和前端交互數據,數據交互的格式都是JSON,在此過程中免不了json字元串與JSON對象互相轉換,自己在這一方面的概念總是很混亂,最近看源碼和部落格,在此記錄一下。注意:全程用的是fastjson
首先JSON有兩種格式,一種是對象格式,一種是對象數組。
在JSON使用中主要的3個類:JSON,JSONObjec,JSONArray
其中JSONObjec
和JSONArray
繼承於JSON
的。
JSON對象(JSONObject)
{"id":1,"name":"chen"}
JSON對象數組(JSONArray)
[
{"id":1,"name":"chen"},
{"id":2,"name":"張三"}
]
下面直接進入正題:
Java Bean 和JSON字元串的互轉
Java Bean 轉 JSON字元串
Java Bean是指Java中的一個普通對象(實體類)例如:
public class Student{
private String name; // 姓名
private Integer age; // 年齡
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return age;
}
@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
使用JSON
類的toJSONString()
方法,實現JSON
對象轉化為JSON
字元串和Java Bean
對象轉化為JSON
字元串。仔細觀察源碼發現,該方法經過多次重載,但最終都是實現JSON
對象轉化為JSON
字元串和Java Bean
對象轉化為JSON
字元串。
@Test
public void BeanToJSONTest(){
Student student = new Student();
student.setName("小明");
student.setAge(20);
String s1 = JSON.toJSONString(student);
String s2 = JSONObject.toJSONString(student);
String s3 = JSONArray.toJSOnString(student);
System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
System.out.println("s3: " + s3);
}
// 輸出
s1: {"age":20,"name":"小明"}
s2: {"age":20,"name":"小明"}
s3: {"age":20,"name":"小明"}
JSON.toJSONString()
、JSONObject.toJSONString
和JSONArray.toJSOnString
,上面說到JSONObject
和JSONArray
是繼承JSON
的,看JSONObject
和JSONArray
的源碼並沒有重寫父類的toJSONString()
的方法,而是直接使用父類的toJSONString
方法,之前一直弄不明白,看了源碼才知道。
JSON字元串 轉 Java Bean
使用JSON
類的parseObject()
方法,實現JSON
字元串轉換為JSON
對象或Java Bean
對象。
@Test
public void JOSNToBeanTest(){
String strJson = "{\"age\":20,\"name\":\"小明\"}";
JSONObject jsonObject = JSON.parseObject(strJson);
System.out.println("jsonObject: " + jsonObject);
Student student = JSON.parseObject(strJson,Student.class);
System.out.println("student: " + student);
}
// 輸出
jsonObject: {"name":"小明","age":20}
student: Student{name='小明', age=20}
該方法返回JSONObject
對象,用於實現JSON
字元串向JSON
對象的轉化,其內部調用了parse()
方法,調用底層的DefaultJSONParse
r解析類進行轉化,在轉化失敗時,拋出can not cast to JSONObject
異常。
該方法不僅能實現JSON
字元串向JSON
對象的轉化,經過重載之後,還能實現JSON
字元串向Java Bean
對象的轉化