JSON数据解析常用方法:
有如下JSON数据:
访问第三方天气接口,得到如下JSON数据,求得未来五天的天气数据:
该JSON数据该如何解析呢?
方法一:
//得到json串
String json = restTemplate.getForObject(url, String.class);
//解析成json串对象
JSONObject jsonObject = JSON.parseObject(json);
//通过键得到一个map集合
Map<String,Object> data = (Map<String, Object>) jsonObject.get("data");
//通过键得到一个list集合
List<Weather> forecast = (List<Weather>) data.get("forecast");
//未来五天 (包括今天)
List<Weather> weatherList = forecastList.stream().limit(5).collect(Collectors.toList());
通过JSONObject和JSONArray解析
//得到响应的json转换为json格式的对象
JSONObject jsonObject = restTemplate.getForObject(url, JSONObject.class);
//获取到"data"里面的信息json对象
JSONObject data = jsonObject.getJSONObject("data");
//得到一个json的数组集合
JSONArray forecastJson = data.getJSONArray("forecast");
//把json格式的数组转换为list集合
List<Weather> forecastList = forecastJson.toJavaList(Weather.class);
List<Weather> forecast= forecastList.stream().map(item ->{
Weather weather = new Weather();
//获取未来五天的天气数据
if(forecastList.indexOf(item)>=0 && forecastList.indexOf(item)<=4){
BeanUtils.copyProperties(item,weather);
return weather;
}
return null;
}).collect(Collectors.toList());
//移除空元素
Iterator<Weather> iterator = forecast.iterator();
while (iterator.hasNext()){
if (iterator.next()==null){
iterator.remove();
}
}
如果得到的是一个数组:
则直接解析:
解析成字符串方式
String json = restTemplate.getForObject(url, String.class);
List<Weather> weatherList = JSONArray.parseArray(json, Weather.class);
JSONArray jsonArray = restTemplate.getForObject(url, JSONArray.class);
List<Weather> list = jsonArray.toJavaList(Weather.class);