核心技術篇:6.android網路編程之json解析

來源:互聯網
上載者:User

標籤:

  前言:好一段時間沒寫部落格了,說最近挺忙的,感覺像是個借口,每天還是同樣的24個小時,每天還是同樣的5:30就準時下班,每天晚上還是有大量的空餘時間...最直接的原因就是,最近墮落了。腦子裡也時常會有很多想法浮現,都是些比較實際的想法,但往往就是浮現那一下,心情激動了一下,心裡默默告訴自己,有時間就要這麼做...好多想法都被一些其它的誘惑給磨滅掉了,要麼是打球、要麼是看電影、要麼是處理一些亂七八糟的事去了。總之,近段時間,花在技術上的時間很少很少,好好反思下。

  前段時間,來了一位新疆的客戶,提出了一個需求,需求不難實現,只是客戶很趕時間,希望在兩天內搞出來,想想當時還是年輕氣盛,沒多想,就答應下來了。其中有一個環節需要與客戶的後台進行對接,後台介面返回的資料類型為json,很簡單的資料結構,沒有嵌很多層。但由於自己之前與背景對接用的一直都是webservice,突然出來個json,一下子有點蒙了。不過對於json這麼常用的資料結構,都沒有把握其解析方法,自己也是該好好反思。剛遇到這問題時,想著問題搞完了一定要寫一篇部落格來好好記錄下json的解析方法,以便後期的項目用到時,可以快速上手。但項目過去好一段時間了,部落格一直推到了今天才開始寫,其中的原因就像開篇說的...

  JSON定義:一種輕量級的資料交換格式,具有良好的可讀和快速編寫特性,業內主流技術為其提供了完整的解決方案,從而可以在不同平台間進行資料互動。

  JSON解析:在講解JSON解析方法前,先來瞭解兩個基本概念:

    1.JSONObject:一個基本的json對象,有關json定義的基本單元,說白了,其實就是一堆索引值對(key/value),對外體現為一個標準的字串,如:{"name":"dean"}.最外被大括弧包裹,內部的key和value之間用:分隔,value的類型包括:Boolean,JSONArray,JSONObject,Number,String,JSONObject.NULL object.

    2.JSONArray:它代表一組有序的數值,對外的表現形式為:最外層用方括弧包裹,數值以逗號,分隔,如:[value1,value2,value3]

  JSON總共有四種資料格式:a.直接對象 b.數組 c.對象裡麵包含數組 d.數組裡麵包含數組 其實解析原理都一樣,遇到object就可以直接調用object.getString()方法擷取value,遇到array就逐個轉換為object,再調用object.getString()方法擷取value.   下面以代碼形式展示具體如何解析JSON:

//JSON對象直接解析        btnObjectPaser.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    //JSON字串                    String json="{\"username\":\"dean\",\"age\":23,\"addr\":\"廣東省廣州市天河區\"}";                    //根據JSON字串 獲得JSON object對象                    JSONObject jsonObject =new JSONObject(json);                    //根據key 擷取相應的value                    String str="名字:"+jsonObject.getString("username")+"  年齡:"+jsonObject.getString("age")+"  住址:"+jsonObject.getString("addr")+"\n";                    tvShowResult.setText(str);                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });        //JSON數組直接解析        btnArrayPaser.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    //JSON字串                    String json="[{\"username\":\"dean\",\"age\":\"23\",\"addr\":\"廣東省廣州市天河區\"}," +                            "{\"username\":\"小張\",\"age\":\"32\",\"addr\":\"廣東省廣州市白雲區\"}]";                    String str = "";                    //根據JSON字串 獲得JSON數組                    JSONArray jsonArray =new JSONArray(json);                    for(int i=0;i<jsonArray.length();i++){                        JSONObject jsonObject = (JSONObject)jsonArray.opt(i);//將JSON數組通過opt()函數轉換為JSONObject                        //根據key 擷取相應的value                        str +="名字:"+jsonObject.getString("username")+"  年齡:"+jsonObject.getString("age")+"  住址:"+jsonObject.getString("addr")+"\n";                    }                    tvShowResult.setText(str);                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });        //JSON對象裡有數組        btnArrayInObject.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    //JSON字串                    String json= "{\"username\":\"張木生\",age:11,\"jicheng\":[{\"zhengshu\":\"PMP\",\"date\":\"2011年\"}," +                            "{\"zhengshu\":\"資訊系統專案管理師\",\"date\":\"2012年\"}],\"addr\":\"江西\"}";                    String str = "";                    //根據JSON字串 獲得JSON對象                    JSONObject jsonObject =new JSONObject(json);                    str +="名字:"+jsonObject.getString("username")+"  年齡:"+jsonObject.getString("age");                    JSONArray jsonArray = new JSONArray(jsonObject.getString("jicheng"));                    for(int i=0;i<jsonArray.length();i++){                        JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);//將JSON數組通過opt()函數轉換為JSONObject                        //根據key 擷取相應的value                        str +="認證:"+jsonObject2.getString("zhengshu")+"  日期:"+jsonObject2.getString("date")+";";                    }                    str +="地址:"+jsonObject.getString("addr");                    tvShowResult.setText(str);                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });        //JSON數組裡有數組        btnArrayInArray.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    //JSON字串                    String json="["+                            "{\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"贛01\"},"+                            " {\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"贛92\"},"+                            " {\"devid\":\"1234567800\",\"gps\":[{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\"},{\"time\":\"2014-11-12\",\"latitude\":\"29.4963\",\"longitude\":\"116.189\" }],\"devname\":\"贛43\"}"+                            "]";                    String str = "";                    //根據JSON字串 獲得JSON數組                    JSONArray jsonArray = new JSONArray(json);                    for(int i=0;i<jsonArray.length();i++){                        JSONObject jsonObject = (JSONObject)jsonArray.opt(i);//將JSON數組通過opt()函數轉換為JSONObject                        //根據key 擷取相應的value                        str +="ID:"+jsonObject.getString("devid")+",";                        //擷取第二層數組                        JSONArray jsonArray2 = new JSONArray(jsonObject.getString("gps"));//                        JSONArray jsonArray2 = jsonObject.getJSONArray("gps");//也可以這樣獲得第二層數組                        for(int j=0;j<jsonArray2.length();j++){                            JSONObject jsonObject2 = (JSONObject)jsonArray2.opt(j);                            str +=" GPS時間:"+jsonObject2.getString("time")+" GPS經度:"+jsonObject2.getString("latitude")+" GPS維度:"+jsonObject2.getString("longitude")+";";                        }                        str +=" 裝置名稱:"+jsonObject.getString("devname")+".";                    }                    tvShowResult.setText(str);                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });

  

核心技術篇:6.android網路編程之json解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.