zoukankan      html  css  js  c++  java
  • 解析json字符串,把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;
    }
    
  • 相关阅读:
    harbor无法登陆解决
    k8s中使用harbor
    harbor扩容
    harbor设置开机自启
    设置开机自启
    关Java的内存模型(JMM)
    多线程相关概念
    多线程(JDK1.5的新特性互斥锁)
    synchronized关键字
    【异常】redis.clients.jedis.exceptions.JedisDataException: ERR unknown command 'PSETEX'
  • 原文地址:https://www.cnblogs.com/csyxsy/p/13340212.html
Copyright © 2011-2022 走看看