使用GSON解析复杂数据——天气信息

版权声明:本文为博主原创文章,但是可以随意转载。 https://blog.csdn.net/zhang5690800/article/details/79013928

最近在做自己的App时,要在主界面上添加简单的天气信息显示,然后就理所当然的跑到百度查找如何才能获取到天气信息,最后决定采用第三方天气信息服务商提供的数据,在看第三方提供的API说明时发现,获取到的天气数据是Json格式的,需要自己解析。又是经过一番百度,最后确定使用Google提供的Gson库来解析Json数据。

这里不讲为什么,只通过一个例子展现Gson解析Json数据的过程。

使用的编辑器为Android Studio,首先给自己的项添加Gson库,并且给Android Studio安装GsonFormat插件。

  • Gson添加方法,To use Gson in Android。
dependencies {
    compile 'com.google.code.gson:gson:2.8.2'
}

示 例

先展示下要解析的Json数据:

这个Json数据总共分为三层
 - 第一层:error / status / date / results
 - 第二层:results中又分为 currentCity / weather_data
 - 第三层:weather_data中又分为 date / weather / wind / temperature

具体数据如下:
{
    "error": 0,
    "status": "success",
    "date": "2017-11-25",
    "results": [
        {
            "currentCity": "杭州",
            "weather_data": [
                {
                    "date": "周六(今天, 实时:19℃)",
                    "weather": "大雨",
                    "wind": "东南风5-6级",
                    "temperature": "18℃"
                },
                {
                    "date": "周日",
                    "weather": "阵雨转多云",
                    "wind": "西北风4-5级",
                    "temperature": "21 ~ 14℃"
                }
            ]
        }
    ]
}

在项目中新建一个类Test_Weather.java,这里直接使用GsonFormat插件生成代码,如下:

package com.************.server.MyClass;

import java.util.List;

public class Test_Weather {

    /**
     * error : 0
     * status : success
     * date : 2017-11-25
     * results : [{"currentCity":"杭州","weather_data":[{"date":"周六(今天, 实时:19℃)","weather":"大雨","wind":"东南风5-6级","temperature":"18℃"},{"date":"周日","weather":"阵雨转多云","wind":"西北风4-5级","temperature":"21 ~ 14℃"}]}]
     */

    private int error;
    private String status;
    private String date;
    private List<ResultsBean> results;

    public int getError() {
        return error;
    }

    public void setError(int error) {
        this.error = error;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List<ResultsBean> getResults() {
        return results;
    }

    public void setResults(List<ResultsBean> results) {
        this.results = results;
    }

    public static class ResultsBean {
        /**
         * currentCity : 杭州
         * weather_data : [{"date":"周六(今天, 实时:19℃)","weather":"大雨","wind":"东南风5-6级","temperature":"18℃"},{"date":"周日","weather":"阵雨转多云","wind":"西北风4-5级","temperature":"21 ~ 14℃"}]
         */

        private String currentCity;
        private List<WeatherDataBean> weather_data;

        public String getCurrentCity() {
            return currentCity;
        }

        public void setCurrentCity(String currentCity) {
            this.currentCity = currentCity;
        }

        public List<WeatherDataBean> getWeather_data() {
            return weather_data;
        }

        public void setWeather_data(List<WeatherDataBean> weather_data) {
            this.weather_data = weather_data;
        }

        public static class WeatherDataBean {
            /**
             * date : 周六(今天, 实时:19℃)
             * weather : 大雨
             * wind : 东南风5-6级
             * temperature : 18℃
             */

            private String date;
            private String weather;
            private String wind;
            private String temperature;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getWeather() {
                return weather;
            }

            public void setWeather(String weather) {
                this.weather = weather;
            }

            public String getWind() {
                return wind;
            }

            public void setWind(String wind) {
                this.wind = wind;
            }

            public String getTemperature() {
                return temperature;
            }

            public void setTemperature(String temperature) {
                this.temperature = temperature;
            }
        }
    }

}

然后准备使用Gson解析,前面准备的天气信息。这里是在Activity中使用的。

 private void parseJsonWithGson_demo(String jsonData) {

        // 初始化GSON
        Gson gson = new Gson();

        // 使用Gson提供的fromJson将String格式的Json数据转为对象
        Test_Weather weather = gson.fromJson(jsonData, Test_Weather.class);

        // 解析出第一层的数据
        Log.d("Tag", "error: " + weather.getError());
        Log.d("Tag", "status: " + weather.getStatus());
        Log.d("Tag", "date: " + weather.getDate());

        // 解析"results":[]中的第二层数据,因为是数组,获取的对象要用用List<>声明
        List<Test_Weather.ResultsBean> results = weather.getResults();

        // 遍历"results":[]中的所有元素
        for (Test_Weather.ResultsBean res : results) {

            // 直接获取第二层数据
            Log.d("Tag", "CurrentCity: " + res.getCurrentCity());

            // 解析"weather_data":[]中的第三层数据,因为是数组,获取的对象要用用List<>声明
            List<Test_Weather.ResultsBean.WeatherDataBean> weatherDataBeans = res.getWeather_data();

            // 遍历"weather_data":[]中的所有元素
            for (Test_Weather.ResultsBean.WeatherDataBean wea : weatherDataBeans) {

                // 直接获取第三层数据
                Log.d("Tag", "date: " + wea.getDate());
                Log.d("Tag", "weather: " + wea.getWeather());
                Log.d("Tag", "wind: " + wea.getWind());
                Log.d("Tag", "temperature: " + wea.getTemperature());
            }
        }
    }

找个地方调用方法 parseJsonWithGson(“这里传入上面给出的Json格式的数据”);
在控制台中可以看到解析出来的数据。

猜你喜欢

转载自blog.csdn.net/zhang5690800/article/details/79013928