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;
}