[解析JSON响应数据]

JSON数据解析常用方法:

有如下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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值