zoukankan      html  css  js  c++  java
  • Android JSON 解析关键代码

    Android Json 解析其实还是蛮重要的知识点,为什么这么说呢,因为安卓通信大部分的协议都是使用 json 的方式传输,我知道以前大部分是使用的 xml ,但是时代在发展社会在进步,json 成为了主流,那 json 解析就显得尤为重要。

    json的形式在我看来就是键值对集合,所以关键就是 json字符串转换为 json对象,和 json对象转换为 json字符串。

    网站提供给Android的API接口返回的都是json格式字符串,所以说呢,安卓调用API(例如天气的API接口)接口开发的必经之路就是将网站返回的json格式字符串转化为json对象,我们在用的时候就可以.属性(点 属性)的方式把需要的值给找出来。

    期初我想要的是没有 [ ] 括起来的json字符串,还没有实验成功,但是找到了有括号括起来的json字符串,没问题了!

    Json 解析(最外层有 【 】包成列表的形式 ):

    [{"id":"5","version":"5.5","name":"愤怒的小鸟"},
    {"id":"6","version":"7.0","name":"神庙逃亡"},
    {"id":"7","version":"3.5","name":"保卫萝卜"}]

    将上面 json 格式字符串转化为 json 对象:

      private void parseJSONWithJSONObject(String jsonData) {
            try {
    
                JSONArray jsonArray = new JSONArray(jsonData);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
    
                    String id = jsonObject.getString("id");
                    String name = jsonObject.getString("name");
                    String version = jsonObject.getString("version");
                    Log.d("woider", "id is " + id);
                    Log.d("woider", "name is " + name);
                    Log.d("woider", "version is " + version);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    以上就是含有 [ ] 包裹成列表形式的json字符串解析的关键代码。

    *********************   手动分割线     ***************************

    那么有些时候,例如天气的API接口没有最外层的方括号包裹,单纯的一条json数据怎么办?我也找到案例了,哈哈哈~~

    json 字符串:

    {
        "user":{
            "name":"wjw",
            "age":"20",
            "isMan":true
        }
    }

    Android  Json解析的代码案例:

    public class OrgJSONTest {
    
        public static String json = "{"user":{"name":"wjw","age":"20","isMan":true}}";
    
    
        public static void main(String[] args){
            JSONObject obj = new JSONObject(json);//最外层的JSONObject对象
            JSONObject user = obj.getJSONObject("user");//通过user字段获取其所包含的JSONObject对象
            String name = user.getString("name");//通过name字段获取其所包含的字符串
    
            System.out.println(name);
    
    
        }
    }

    OK!那么Android的json解析基础基本上没问题了,至于json字符串转对象还没有这么用到过,用到的时候在做笔记吧!

     

    *******************************  手动分割线   ************************************

    另外提供一个 天气 的API接口:

    天气API接口  : 这个接口呢,在我发博的时候还是可以用的,做一些基础的练习是没有问题的。

    下面其中有一个请求北京天气是返回的数据:

    {"date":"20180420","message":"Success !","status":200,"city":"北京","count":485,"data":{"shidu":"58%","pm25":84.0,"pm10":152.0,"quality":"轻度污染","wendu":"19","ganmao":"儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼","yesterday":{"date":"19日星期四","sunrise":"05:33","high":"高温 26.0℃","low":"低温 13.0℃","sunset":"18:56","aqi":150.0,"fx":"东南风","fl":"4-5级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},"forecast":[{"date":"20日星期五","sunrise":"05:32","high":"高温 28.0℃","low":"低温 14.0℃","sunset":"18:57","aqi":103.0,"fx":"南风","fl":"4-5级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"21日星期六","sunrise":"05:30","high":"高温 17.0℃","low":"低温 12.0℃","sunset":"18:58","aqi":111.0,"fx":"东北风","fl":"3-4级","type":"中雨","notice":"记得随身携带雨伞哦"},{"date":"22日星期日","sunrise":"05:29","high":"高温 20.0℃","low":"低温 11.0℃","sunset":"18:59","aqi":36.0,"fx":"北风","fl":"3-4级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"23日星期一","sunrise":"05:28","high":"高温 20.0℃","low":"低温 9.0℃","sunset":"19:00","aqi":29.0,"fx":"东北风","fl":"3-4级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"24日星期二","sunrise":"05:26","high":"高温 24.0℃","low":"低温 10.0℃","sunset":"19:01","aqi":33.0,"fx":"西南风","fl":"3-4级","type":"晴","notice":"愿你拥有比阳光明媚的心情"}]}}
  • 相关阅读:
    阻塞队列整理
    List与Map整理
    2、Redis中的链表
    【观点】从曾成杰案看民间金融的高风险与银行缺失的机制创新
    林权抵押贷款政策出台 将实现林业资源变资本
    从《男生传递微笑给女生的故事》想到的流程梳理与优化
    落实制度靠流程<摘自平安50万人的执行力>
    vue踩坑- 报错npm ERR! cb() never called!
    vue踩坑-This dependency was not found
    vue踩坑- 报错npm ERR! cb() never called!
  • 原文地址:https://www.cnblogs.com/wjw1014/p/8885846.html
Copyright © 2011-2022 走看看