【问题解决】如何将json字符串转为List

关于json字符串的处理

注:这是我通过接口远程调度得到的json字符串。

{
    "code":0,
    "message":"ok",
    "data":[
        {
            "stationId":54416,
            "localDate":"2021-04-11T16:00:00.000+00:00",
            "temAvgDay":3.1125,
            "temMaxDay":7.4,
            "temMinDay":0,
            "winMax":1.8,
            "totalPrecip":0
        },
        {
            "stationId":54416,
            "localDate":"2021-04-12T16:00:00.000+00:00",
            "temAvgDay":12.04,
            "temMaxDay":16.4,
            "temMinDay":5.6,
            "winMax":4.7,
            "totalPrecip":0
        }
    ]
}

​ 在远程调度接口的时候,接口返回我们这一个json字符串。这时候我们需要提取出这个json字符串中的data数据,在事前我们已经写了一个这样的类对象,用于存储这里面的相关系,但是这之间应该如何操作呢?

​ 首先,这返回的是一个json字符串,我是无法对其进行操作的。所以第一步我们应该将这个json字符串转为json对象。

//getDataInfo() 这个是我远程调度接口的方法,这里不做详细展示
JSONObject jsonObject = (JSONObject) getDataInfo(match.getStationId()).getData();

​ 在转成json对象过后我们就可以去取里面的值了,完成数据的定向获取。这里用一个JSONArray数组来接收。

JSONArray data = jsonObject.getJSONArray("data");

​ 虽然拿到了这个数据,但是我们无法获取这一条一条数据中的具体属性,因为java虽然知道这是一个数组,但是也仅仅是一个数组,不知道他里面到底有什么。于是我们希望将这个JSONArray转为我们实现写好的DataInfo类的List,这样我们就可以去获取其中的属性了。

//JSONArray 转 List
List<Station> list = JSONArray.parseArray(data.toJSONString(),DataInfo.class);

如此一来,我们就将这json字符串转为了我们写好的可操作的类对象List了。

但是我们虽然把这个数据进行处理了,但是我们想让他按照时间顺序排个序,不然这个无序的排列着实的让人不爽(强迫症患者= =)。

调用Collections.sort(List list, Comparator<? super T> c)方法

//重写 sort比较方法
Collections.sort(list, new Comparator<DataInfo>() {
    @Override
    public int compare(DataInfo o1, DataInfo o2) {
        return o2.getLocalDate().compareTo(o1.getLocalDate());
    }
});

完整代码

JSONObject jsonObject = (JSONObject) getDataInfo(match.getStationId()).getData();
  JSONArray data = jsonObject.getJSONArray("data");
  //JSONArray 转 List
  List<Station> list = JSONArray.parseArray(data.toJSONString(),Station.class);
  //根据传入的时间进行降序排布
  Collections.sort(list, new Comparator<DataInfo>() {
      @Override
      public int compare(DataInfo o1, DataInfo o2) {
          return o2.getLocalDate().compareTo(o1.getLocalDate());
      }
  });

这波操作下来,我们就完成了对json字符串 → json对象 → List → 排序后List。

妈妈再也不用担心我处理数据难受了。