fastjson將json字符串轉化為java對象


一、導入一個fastjson的jar包

在pom.xml里加上這個依賴:

<dependency>
	<groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.60</version>
</dependency>

二、Json字符串格式

這個例子中的json中包含了json對象和數組

{
  "result": true,
  "data": {
  		"statusCode": 200,
  		"extra": "請求成功"
  },
  "missons": [
      {
        "id": 10,
        "publishTime": "2020-3-10",
        "label": "實習",
        "money": 10,
        "deadline": "2020-3-30",
        "title": "找人"
      },
      {
        "id": 11,
        "state": 0,
        "publishTime": "2020-3-10",
        "money": 10,
        "deadline": "2020-3-30",
        "peopleAmount": 1,
        "changeNumber": 0,
        "title": "abc"
      },
      {
        "id": 12,
        "uid": 15,
        "state": 0,
        "publishTime": "2020-3-10",
        "missionInfo": "求考研數學的資料",
        "label": "考研",
        "money": 10,
        "existenceDate": "2020-3-25",
        "deadline": "2020-3-30",
        "peopleAmount": 0,
        "changeNumber": 0,
        "title": "找資料"
      }
    ]
}

三、根據json的格式創建Java類

創建的Java類中的屬性名字需要和json中的對應,這樣才能實現自動的轉換。
json中一個字段對應Java類的一個屬性,json數組在Java可以使用List表示,一個json對象用一個類表示

public class JsonTest {
    private String result;

    private Data data;

    private List<Misson> missions;
}

data對象

public class Data {
    private String statusCode;

    private String extra;
}

missons數組

public class Misson {   
    private String mid;

    private String state;
    
    private String title;
    
    private String publishTime;

    private String missionInfo;
    
    private String label;

    private String money;

    private String existenceDate;

    private String deadline;

    private String peopleAmount;

    private String changeNumber;
}

四、給java類的所有屬性添加setter方法

在轉換的過程中發現,如果沒有添加setter方法,轉換后得到的對象都為空。

因為轉換過程中底層使用了PropertyDescriptor反射獲取屬性,通過PropertyDescriptor的getWriteMethod()方法獲取屬性的setter方法,最后通過setter方法給屬性賦值,如果沒有獲取到setter方法(getWriteMethod()方法返回了null),就會導致后續無法執行賦值。

每個類都要加,這里只放一個的代碼(Getter和Setter方法都加上了):

public class JsonTest {
    private String result;

    private Data data;

    private List<Mission> missions;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }

    public List<Misson> getMissions() {
        return missions;
    }

    public void setMissions(List<Json> missions) {
        this.missions = missions;
    }
}

五、轉換為java對象

傳入一個json字符串,將它轉換為JsonTest對象

public JsonTest parseJson(String json) {

	JsonTest jsonTest = JSONObject.parseObject(json,JsonTest.class);
    return jsonTest;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM