7.2.1 Android JSON數(shù)據(jù)解析

標(biāo)注:本文為個(gè)人學(xué)習(xí)使用魔策,僅做自己學(xué)習(xí)參考使用,請(qǐng)勿轉(zhuǎn)載和轉(zhuǎn)發(fā)
2018-09-05: 初稿,最近學(xué)習(xí)進(jìn)度好慢在旱,參考博主coder-pig

0. 引言

  • 這一節(jié)主要是對(duì)Json進(jìn)行數(shù)據(jù)解析,一般情況下推掸,和服務(wù)器交互比較多的傳遞方式都是Json字符串的形式桶蝎,保存對(duì)象,也可以寫成一個(gè)Json字符串然后儲(chǔ)存谅畅!
  • 解析Json有很多方式比如Gson登渣、Fastjson等,本節(jié)主要介紹的不是第三方的解析庫(kù)铃彰,而是Android自帶的Json解析器來(lái)解析Json绍豁。

1. Json概念和XML的比較

  1. 什么是Json
    JavaScript Object Natation,一種輕量級(jí)的數(shù)據(jù)交換格式牙捉,與XML一樣竹揍,廣泛被采用的客戶端和服務(wù)端交互的解決方案,具有良好的可讀和便于快捷編寫的特性邪铲。

  2. Json與XML比較
    1)Json和XML的數(shù)據(jù)可讀性基本相同
    2)Json和XML同樣有豐富的解析手段
    3)Json相對(duì)于XML來(lái)講芬位,數(shù)據(jù)的體積小
    4)Json與JavaScript的交互更加方便
    5)Json對(duì)數(shù)據(jù)的描述性比XML較差
    6)Json的速度要遠(yuǎn)遠(yuǎn)快于XML

  3. Json的格式規(guī)范
    就想?yún)f(xié)議一樣,肯定有一套規(guī)范的带到,畢竟雙方都是通過(guò)Json字符串的方式來(lái)傳遞數(shù)據(jù)昧碉,語(yǔ)法規(guī)則如下,數(shù)據(jù)在名稱/值的對(duì)中揽惹,數(shù)據(jù)由逗號(hào)分隔被饿,花括號(hào)保存對(duì)象,方括號(hào)保存數(shù)組搪搏;而Json數(shù)據(jù)的書寫格式:名稱/值對(duì)狭握,

[
   { "id":"1","name":"基神","age":"18" },
   { "id":"2","name":"B神","age":"18"  },
   { "id":"3","name":"曹神","age":"18" }
]
  • 網(wǎng)站上還有一些關(guān)于Json字符串的格式化校驗(yàn)工具,然后將該工具校驗(yàn)之后能更清楚的看清格式邏輯疯溺。

2. Android給我們提供的Json解析類

  • 下面的API都在org.json包下论颅,我們用到的類有下面這些
  1. JSONObject: Json對(duì)象,可以完成Json字符串與Java對(duì)象的相互轉(zhuǎn)換囱嫩。
  2. JSONArray: Json數(shù)組恃疯,可以完成Json字符串與Java集合或?qū)ο蟮南嗷マD(zhuǎn)換
  3. JSONStringer: Json文本構(gòu)建類,這個(gè)類可以幫助快速和便捷的創(chuàng)建Json text墨闲,每個(gè)JSONStringer實(shí)體只能對(duì)應(yīng)創(chuàng)建一個(gè)JSON text
  4. JSONTokener: Json解析類
  5. JSONException: Json異常

3. 代碼示例:解析json字符串

  1. 簡(jiǎn)單的json字符串解析示例
public class Person {
    private String id;
    private String name;
    private String age;
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return this.id;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(String age){
        this.age = age;
    }
    public String getAge(){
        return this.age;
    }
    @Override
    public String toString() {
        return this.name + "~年方:" + this.age;
    }
}

寫一個(gè)解析上面的Json字符串的方法

private void parseEasyJson(String json){
    persons = new ArrayList<Person>();
    try{
        JSONArray jsonArray = new JSONArray(json);
        for(int i = 0;i < jsonArray.length();i++){
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            Person person = new Person();
            person.setId(i+"");
            person.setName(jsonObject.getString("name"));
            person.setAge(jsonObject.getString("age"));
            persons.add(person);
        }
    }catch (Exception e){e.printStackTrace();}
}

運(yùn)行效果圖

  1. 復(fù)雜的Json字符串解析的示例
  • 首先需要將Json串格式化一下今妄,然后判斷需要獲取的對(duì)象是什么


呵呵,那就需要我們一步步來(lái)扣數(shù)據(jù)了:

解析代碼如下

private void parseDiffJson(String json) {
    try {
        JSONObject jsonObject1 = new JSONObject(json);
        Log.e("Json", json);
        JSONArray jsonArray = jsonObject1.getJSONArray("ch");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            //取出name
            String sname = jsonObject.getString("names");
            JSONArray jarray1 = jsonObject.getJSONArray("data");
            JSONArray jarray2 = jsonObject.getJSONArray("times");
            Log.e("Json", sname);
            Log.e("Json", jarray1.toString());
            Log.e("Json", jarray2.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

下面打印的LOG


小結(jié)

  • 還是使用Gson比較適用,方便
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛙奖,一起剝皮案震驚了整個(gè)濱河市潘酗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雁仲,老刑警劉巖仔夺,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異攒砖,居然都是意外死亡缸兔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門吹艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惰蜜,“玉大人,你說(shuō)我怎么就攤上這事受神∨撞” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵鼻听,是天一觀的道長(zhǎng)财著。 經(jīng)常有香客問(wèn)我,道長(zhǎng)撑碴,這世上最難降的妖魔是什么撑教? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮醉拓,結(jié)果婚禮上伟姐,老公的妹妹穿的比我還像新娘。我一直安慰自己亿卤,他們只是感情好愤兵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著排吴,像睡著了一般恐似。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傍念,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音葛闷,去河邊找鬼憋槐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淑趾,可吹牛的內(nèi)容都是我干的阳仔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼近范!你這毒婦竟也來(lái)了嘶摊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤评矩,失蹤者是張志新(化名)和其女友劉穎叶堆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斥杜,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虱颗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔗喂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忘渔。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缰儿,靈堂內(nèi)的尸體忽然破棺而出畦粮,到底是詐尸還是另有隱情,我是刑警寧澤乖阵,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布宣赔,位于F島的核電站,受9級(jí)特大地震影響义起,放射性物質(zhì)發(fā)生泄漏拉背。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一默终、第九天 我趴在偏房一處隱蔽的房頂上張望椅棺。 院中可真熱鬧,春花似錦齐蔽、人聲如沸两疚。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诱渤。三九已至,卻和暖如春谈况,著一層夾襖步出監(jiān)牢的瞬間勺美,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工碑韵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赡茸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓祝闻,卻偏偏與公主長(zhǎng)得像占卧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • JSON的特點(diǎn): 1华蜒、JSON比XML的數(shù)據(jù)傳遞的有效性高辙纬;2、JSON完全獨(dú)立于編程語(yǔ)言叭喜;3贺拣、JSON的本質(zhì)是具...
    程序員之路閱讀 3,484評(píng)論 0 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)域滥,斷路器纵柿,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 《這昂儒!就是街舞》第一期播出之后,在網(wǎng)上引起了熱議委可。而其中議論最多的渊跋,大概就是易烊千璽“發(fā)毛巾”的環(huán)節(jié)。 比賽進(jìn)展前...
    陸北邊閱讀 460評(píng)論 0 2
  • 我擁有的是24小時(shí)的時(shí)間着倾。我要清楚的知道這24小時(shí)是如何過(guò)的拾酝,我不想一天天仿佛被時(shí)間卷走,這種感覺(jué)太糟糕了卡者,我要做...
    圣蘭蘭閱讀 199評(píng)論 0 0
  • 那天夜里 的哭泣聲 還好有著淅淅瀝瀝 的小雨陪伴 沒(méi)有打擾到太多的人 從傷感到流淚的距離 原來(lái)是那么近 在這陰雨的...
    加墨閱讀 259評(píng)論 0 0