JSON解析和XML解析區(qū)別對(duì)比
JSON解析和XML解析是較為普遍的兩種解析方式,其中JSON解析的市場(chǎng)分額更大。本文系統(tǒng)的分析兩種解析方式的區(qū)別,為更好地處理數(shù)據(jù)作準(zhǔn)備。由于目前階段主要是做移動(dòng)開發(fā),所以本文所描述的JSON解析和XML解析均是在安卓環(huán)境下進(jìn)行測(cè)試。
首先要明確一點(diǎn),數(shù)據(jù)解析是為了獲取數(shù)據(jù)的每一個(gè)值,對(duì)于JSON數(shù)據(jù)而言類似于鍵值對(duì)的形式,對(duì)于XML而言是標(biāo)簽和值的形式。簡(jiǎn)單來(lái)說(shuō)就是要在一個(gè)JSON數(shù)據(jù)或XML數(shù)據(jù)中利用鍵或標(biāo)簽找到對(duì)應(yīng)值。
其次要了解一下兩種數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。JSON數(shù)據(jù)分為三種:對(duì)象類型、數(shù)組類型、混合類型。對(duì)象類型JSON數(shù)據(jù)用大括號(hào)包裹,屬性和值相對(duì)應(yīng)。數(shù)組類型JSON數(shù)據(jù)可以看成多個(gè)對(duì)象類型JSON數(shù)據(jù)組合在一起,用中括號(hào)包裹?;旌项愋蚃SON數(shù)據(jù)中既有對(duì)象類型又有數(shù)組類型,大括號(hào)表示的是對(duì)象,中括號(hào)表示的是數(shù)組。XML數(shù)據(jù)以標(biāo)簽的形式進(jìn)行存儲(chǔ),通過(guò)標(biāo)簽名獲取值。所以無(wú)論是JSON解析還是XML解析,都可以先定義一個(gè)雙列集合出來(lái),用于存放數(shù)據(jù)。
JSON數(shù)據(jù)類型:

在安卓環(huán)境下解析JSON數(shù)據(jù)有兩種方式,一種是自定義方法根據(jù)數(shù)據(jù)結(jié)構(gòu)分層解析,另一種是用開源框架。自定義方法進(jìn)行解析時(shí),又可以分為對(duì)象解析、數(shù)組解析、綜合解析。對(duì)象解析較為簡(jiǎn)單,先創(chuàng)建JSON對(duì)象,用對(duì)象的GetXxx()的方法獲取對(duì)應(yīng)的值,然后存儲(chǔ)在集合中,即獲取到JSON數(shù)據(jù)。數(shù)組解析先通過(guò)JsonArray對(duì)象獲取JSON對(duì)象,然后參照對(duì)象解析的方法。綜合解析則是在上述兩種解析基礎(chǔ)上完成的。根據(jù)JSON數(shù)據(jù)的結(jié)構(gòu),按照順序一次獲取JSON對(duì)象和JsonArray對(duì)象知道獲取到所需數(shù)據(jù)。用開源框架進(jìn)行解析基本原理類似,只不過(guò)需要提前進(jìn)行導(dǎo)包,并創(chuàng)建一個(gè)方法類來(lái)調(diào)用包里的內(nèi)容。
讀取對(duì)象類型的JSON數(shù)據(jù):

讀取數(shù)組類型的JSON數(shù)據(jù):

讀取綜合類型的JSON數(shù)據(jù):

用開源框架讀取JSON數(shù)據(jù)的目錄結(jié)構(gòu):

XML解析是邊讀邊解析,方法較為固定,從上到下依次解析。首先創(chuàng)建XmlPullParser解析器,利用解析器設(shè)置要解析的流對(duì)象。然后在一個(gè)循環(huán)中判斷標(biāo)簽類型,如果遇到文件結(jié)束標(biāo)(END_DOCUMENT)簽跳出循環(huán),否則進(jìn)入循環(huán)。在循環(huán)中在有兩種情況,若是開始標(biāo)簽(START_TAG),進(jìn)入標(biāo)簽內(nèi)部,根據(jù)標(biāo)簽名判斷要獲取的數(shù)據(jù),當(dāng)標(biāo)簽名和要得到的數(shù)據(jù)名相同時(shí),用nextText()獲取數(shù)據(jù)。若是結(jié)束標(biāo)簽(END_TAG)將獲取的數(shù)據(jù)存入集合。最后一點(diǎn),不要忘記把標(biāo)簽移向下一個(gè)位置,即:type = parser.next()。
XML解析的方法代碼:

為更好的演示效果,本文最終做出的案例是用安卓設(shè)備從Tomcat服務(wù)器上獲取到JSON數(shù)據(jù)和XML數(shù)據(jù),然后進(jìn)行解析,將解析后的結(jié)果展示在安卓設(shè)備上。
JSON原始數(shù)據(jù):
{
"resultcode": "200",
"reason": "查詢成功!",
"result": {
"sk": {
"temp": "21",
"wind_direction": "西風(fēng)",
"wind_strength": "2級(jí)",
"humidity": "4%",
"time": "14:25"
},
"today": {
"city": "天津",
"date_y": "2014年03月21日",
"week": "星期五",
"temperature": "8℃~20℃",
"weather": "晴轉(zhuǎn)霾",
"weather_id": {
"fa": "00",
"fb": "53"
},
"wind": "西南風(fēng)微風(fēng)",
"dressing_index": "較冷",
"dressing_advice": "建議著大衣、呢外套加毛衣、衛(wèi)衣等服裝。",
"uv_index": "中等",
"comfort_index": "",
"wash_index": "較適宜",
"travel_index": "適宜",
"exercise_index": "較適宜",
"drying_index": ""
},
"future": [
{
"temperature": "28℃~36℃",
"weather": "晴轉(zhuǎn)多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "南風(fēng)3-4級(jí)",
"week": "星期一",
"date": "20140804"
},
{
"temperature": "28℃~36℃",
"weather": "晴轉(zhuǎn)多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "東南風(fēng)3-4級(jí)",
"week": "星期二",
"date": "20140805"
},
{
"temperature": "27℃~35℃",
"weather": "晴轉(zhuǎn)多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "東南風(fēng)3-4級(jí)",
"week": "星期三",
"date": "20140806"
},
{
"temperature": "27℃~34℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "東南風(fēng)3-4級(jí)",
"week": "星期四",
"date": "20140807"
},
{
"temperature": "27℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "東北風(fēng)4-5級(jí)",
"week": "星期五",
"date": "20140808"
},
{
"temperature": "26℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "北風(fēng)4-5級(jí)",
"week": "星期六",
"date": "20140809"
},
{
"temperature": "26℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "北風(fēng)4-5級(jí)",
"week": "星期日",
"date": "20140810"
}
]
},
"error_code": 0
}
解析其中的“future”數(shù)據(jù),結(jié)果如下:

XML原始數(shù)據(jù):
<?xml version="1.0" encoding="UTF-8" ?> <channel> <item> <title>軍報(bào)評(píng)徐才厚</title> <description>人死賬不消 反腐步不停,支持,威武,頂,有希望了。 </description> <image>http://192.168.1.103:8080/img/a.jpg</image> <type>1</type> <comment>163</comment> </item> <item> <title>女司機(jī)翻車后直奔麻將室</title> <description>女司機(jī)翻車后直奔麻將室,稱大難不死手氣必紅 </description> <image>http://192.168.1.103:8080/img/b.jpg</image> <type>2</type> </item> <item> <title>小伙當(dāng)“男公關(guān)”以為陪美女</title> <description>來(lái)源:中國(guó)青年網(wǎng),小伙當(dāng)“男公關(guān)”以為陪美女,上工后被大媽嚇怕 </description> <image>http://192.168.1.103:8080/img/c.jpg</image> <type>3</type> </item> <item> <title>男子看上女孩背影欲強(qiáng)奸</title> <description> 來(lái)源:新京報(bào), 看到正臉后放棄仍被捕 </description> <image>http://192.168.1.103:8080/img/d.jpg</image> <type>1</type> <comment>763</comment> </item> </channel>
解析后的成果展示:

至此,基本完成JSON解析和XML解析。
以上所述是小編給大家介紹的JSON解析和XML解析區(qū)別對(duì)比,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Ajax如何傳輸Json和xml數(shù)據(jù)
- JavaScript原生xmlHttp與jquery的ajax方法json數(shù)據(jù)格式實(shí)例
- JQuery的ajax獲取數(shù)據(jù)后的處理總結(jié)(html,xml,json)
- js實(shí)現(xiàn)的xml對(duì)象轉(zhuǎn)json功能示例
- JSON與XML的區(qū)別對(duì)比及案例應(yīng)用
- 如何在JS中實(shí)現(xiàn)相互轉(zhuǎn)換XML和JSON
- JSON與XML優(yōu)缺點(diǎn)對(duì)比分析
- jQuery基于ajax操作json數(shù)據(jù)簡(jiǎn)單示例
- php+ajax+json 詳解及實(shí)例代碼
- Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法總結(jié)
- javascript解析ajax返回的xml和json格式數(shù)據(jù)實(shí)例詳解
相關(guān)文章
Android適配利用webview加載后圖片顯示過(guò)大的問(wèn)題解決
這篇文章主要給大家介紹了關(guān)于Android適配利用webview加載后圖片顯示過(guò)大問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Android實(shí)現(xiàn)搜索本地音樂(lè)的方法
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)搜索本地音樂(lè)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
為Android應(yīng)用增加渠道信息 自動(dòng)化不同渠道的打包過(guò)程的使用詳解
為了統(tǒng)計(jì)渠道信息,就不得不在程序的某個(gè)地方加入渠道的信息,然后針對(duì)不同的渠道打不同的包。一般可以在Manifest文件中加入渠道編號(hào),而不直接寫在代碼中。這樣做的好處是,可以針對(duì)不同渠道,自動(dòng)化去修改Manifest文件中的渠道編號(hào),然后自動(dòng)為該渠道打包2013-05-05
Android利用ViewPager實(shí)現(xiàn)帶小圓球的圖片滑動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android利用ViewPager實(shí)現(xiàn)帶小圓球的圖片滑動(dòng),并且只有第一次安裝app時(shí)才出現(xiàn)歡迎界面具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
Android 中TextView中跑馬燈效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 中TextView中跑馬燈效果的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問(wèn)題小結(jié)
這篇文章主要介紹了Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問(wèn)題的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11
Android Mms之:對(duì)話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
本篇文章是對(duì)Android中對(duì)話與聯(lián)系人的關(guān)聯(lián)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
淺析AndroidStudio3.0最新 Android Profiler分析器(cpu memory network
Android Profiler分為三大模塊: cpu、內(nèi)存 、網(wǎng)絡(luò)。本文給大家介紹AndroidStudio3.0最新 Android Profiler分析器(cpu memory network 分析器)的相關(guān)知識(shí),他們的基本使用方法,在文中都給大家提到,具體內(nèi)容詳情大家通過(guò)本文一起學(xué)習(xí)吧2017-12-12

