以一个简易的引用和风api的天气预报APP教会你如何在android开发中解析JSON数据

本文介绍了如何在Android应用中解析JSON数据,重点讲解了使用Gson库和GsonFormat插件自动生成JavaBean进行数据绑定。通过接入和风天气API,演示了从获取JSON数据到展示在APP上的完整过程,包括注册和获取API key,使用Postman检查请求,以及在布局中显示天气信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.JSON格式以及JSON数据字符的解析方式

首先,我们需要知道JSON的格式。那么JSON的格式是怎么样的呢?

{

“name”:“JY”,

“age”:22

}     

这就是一个最简单的JSON格式例子。JOSN格式采用的是key:value的键值相对应来写的,key是字符串,value为key的值,它有String,number,boolean,array等类型。key之间用“,”来隔开。

JAVA中传统解析JSON一般有三种方式:

首先你的生成一个JSON字符串,你可以这样生成

public static String createJsonString(String key, Object value) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put(key, value);
    return jsonObject.toString();
}

将JSON数据生成为

1.一个JavaBean,

2.一个List数组,

3.一个嵌套Map的List数组

在这里我推荐使用第一种方式(生成为一个JavaBean),因为在项目中一般需要对JSON数据中的key的value做一些处理,这时候JavaBean的好处就体现出来了,它相对于其他两种方式的使用更加灵活。

二.JSON之GSON

在android studio中有一个十分好用的插件,就是GsonFormat,它可以很方便的帮助我们将JSON数据字符串自动生成为一个JavaBean,用Gson来解析就很容易了。

当你在android studio安装好GsonFormat之后,使用步骤如下:

1.在Code中选中Generate

 
 

2.选中

3.将你获取到的JSON数据直接复制到里面去就可以一键生成你所需要的JavaBean



好,基础已经讲完。下面讲讲如何获取天气的JSON数据

三、接入和风天气api的天气预报demo

若想接入api,就需要一个app的key,这时候我们需要到和风天气的官网去注册一个账号,一般我们选个人开发者就好了,免费的api也算够我们测试使用。当然,如果你是公司项目使用需要更多的数据,你可以选择企业客户注册。



注册完成认证通过后你需要去控制台找到自己的认证key,因为api接入的参数中需要这个key



那么,我们应该怎么接入呢?别急嘛,人家有接入文档的嘛!


箭头所指的地方就是接入api的方式,parameters在下面有说明,自己可以根据自己的需要来接入,但是一定要有key

在这里,你可以将这个请求地址直接输入到浏览器中查看请求到的JSON数据是什么。不过,个人推荐使用postman来查看,因为不需要自己改格式,自动生成自己想要的格式,有没有觉得好方便。



好,直到现在,我们已经获取到我们需要的和风天气的JSON数据了,接下来就是如何在demo中将它生成为一个JavaBean以及解析它们了。

还记得我们前面说的android studio的插件GsonFormat嘛,对,没错,现在就是使用它的时候了.由于我当时是请求所有的免费天气api,所以代码很多很长,不过没关系,因为都不需要你去写这个代码,毕竟一键生成嘛,会用就行,对吧。

public class WeatherBean {

    private List<HeWeather6Bean> HeWeather6;

    public List<HeWeather6Bean> getHeWeather6() {
        return HeWeather6;
    }

    public void setHeWeather6(List<HeWeather6Bean> HeWeather6) {
        this.HeWeather6 = HeWeather6;
    }

    public static class HeWeather6Bean {
        /**
         * basic : {"cid":"CN101010100","location":"北京","parent_city":"北京","admin_area":"北京","cnty":"中国","lat":"39.90498734","lon":"116.4052887","tz":"+8.00"}
         * update : {"loc":"2018-05-01 14:47","utc":"2018-05-01 06:47"}
         * status : ok
         * now : {"cloud":"0","cond_code":"504","cond_txt":"浮尘","fl":"18","hum":"26","pcpn":"0.0","pres":"1013","tmp":"21","vis":"10","wind_deg":"72","wind_dir":"东北风","wind_sc":"3","wind_spd":"14"}
         * daily_forecast : [{"cond_code_d":"504","cond_code_n":"101","cond_txt_d":"浮尘","cond_txt_n":"多云","date":"2018-05-01","hum":"35","mr":"20:19","ms":"06:13","pcpn":"0.0","pop":"0","pres":"1015","sr":"05:16","ss":"19:09","tmp_max":"24","tmp_min":"13","uv_index":"6","vis":"20","wind_deg":"3","wind_dir":"北风","wind_sc":"4-5","wind_spd":"33"},{"cond_code_d":"101","cond_code_n":"100","cond_txt_d":"多云","cond_txt_n":"晴","date":"2018-05-02","hum":"18","mr":"21:19","ms":"06:49","pcpn":"0.0","pop":"0","pres":"1020","sr":"05:15","ss":"19:10","tmp_max":"24","tmp_min":"13","uv_index":"6","vis":"20","wind_deg":"210","wind_dir":"西南风","wind_sc":"3-4","wind_spd":"21"},{"cond_code_d":"100","cond_code_n":"100","cond_txt_d":"晴","cond_txt_n":"晴","date":"2018-05-03","hum":"20","mr":"22:14","ms":"07:28","pcpn":"0.0","pop":"0","pres":"1022","sr":"05:13","ss":"19:11","tmp_max":"24","tmp_min":"13","uv_index":"7","vis":"20","wind_deg":"177","wind_dir":"南风","wind_sc":"1-2","wind_spd":"4"}]
         * lifestyle : [{"type":"comf","brf":"舒适","txt":"白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。"},{"type":"drsg","brf":"较舒适","txt":"建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"},{"type":"flu","brf":"较易发","txt":"虽然温度适宜但风力较大,仍较易发生感冒,体质较弱的朋友请注意适当防护。"},{"type":"sport","brf":"较适宜","txt":"阴天,较适宜进行各种户内外运动。"},{"type":"trav","brf":"适宜","txt":"天气较好,风稍大,但温度适宜,总体来说还是好天气。这样的天气适宜旅游,您可以尽情享受大自然的风光。"},{"type":"uv","brf":"最弱","txt":"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"},{"type":"cw","brf":"较不宜","txt":"较不宜洗车,未来一天无雨,风力较大,如果执意擦洗汽车,要做好蒙上污垢的心理准备。"},{"type":"air","brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"}]
         */
        private BasicBean basic;
        private UpdateBean update;
        private String status;
        private NowBean now;
        private List<DailyForecastBean> daily_forecast;
        private List<LifestyleBean> lifestyle;

        public BasicBean getBasic() {
            return basic;
        }

        public void setBasic(BasicBean basic) {
            this.basic = basic;
        }

        public UpdateBean getUpdate() {
            return update;
        }

        public void setUpdate(UpdateBean update) {
            this.update = update;
        }

        public String getStatus() {
            return status;
        }

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

        public NowBean getNow() {
            return now;
        }

        public void setNow(NowBean now) {
            this.now = now;
        }

        public List<DailyForecastBean> getDaily_forecast() {
            return daily_forecast;
        }

        public void setDaily_forecast(List<DailyForecastBean> daily_forecast) {
            this.daily_forecast = daily_forecast;
        }

        public List<Lifestyl
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值