注:这是我通过接口远程调度得到的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。
妈妈再也不用担心我处理数据难受了。