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;
}
posted @ 2020-07-16 09:53  衍射  阅读(8869)  评论(0编辑  收藏  举报