fastjson: json對象,json對象數組,javabean對象,json字元串之間的相互轉化

fastjson: json對象,json對象數組,javabean對象,json字元串之間的相互轉化

在開發過程中,經常需要和前端交互數據,數據交互的格式都是JSON,在此過程中免不了json字元串與JSON對象互相轉換,自己在這一方面的概念總是很混亂,最近看源碼和部落格,在此記錄一下。注意:全程用的是fastjson

首先JSON有兩種格式,一種是對象格式,一種是對象數組。

在JSON使用中主要的3個類:JSONJSONObjecJSONArray

其中JSONObjecJSONArray繼承於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.toJSONStringJSONArray.toJSOnString,上面說到JSONObjectJSONArray是繼承JSON的,看JSONObjectJSONArray的源碼並沒有重寫父類的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()方法,調用底層的DefaultJSONParser解析類進行轉化,在轉化失敗時,拋出can not cast to JSONObject異常。

該方法不僅能實現JSON字元串向JSON對象的轉化,經過重載之後,還能實現JSON字元串向Java Bean對象的轉化

Tags: