一、導入一個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;
}