fastjson: json物件,json物件陣列,javabean物件,json字串之間的相互轉化

這行程式碼沒Bug發表於2021-07-15

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物件的轉化

相關文章