JSON解析和XML解析區(qū)別對比
JSON解析和XML解析是較為普遍的兩種解析方式,其中JSON解析的市場分額更大。本文系統(tǒng)的分析兩種解析方式的區(qū)別,為更好地處理數(shù)據(jù)作準(zhǔn)備。由于目前階段主要是做移動開發(fā),所以本文所描述的JSON解析和XML解析均是在安卓環(huán)境下進(jìn)行測試。
首先要明確一點(diǎn),數(shù)據(jù)解析是為了獲取數(shù)據(jù)的每一個值,對于JSON數(shù)據(jù)而言類似于鍵值對的形式,對于XML而言是標(biāo)簽和值的形式。簡單來說就是要在一個JSON數(shù)據(jù)或XML數(shù)據(jù)中利用鍵或標(biāo)簽找到對應(yīng)值。
其次要了解一下兩種數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。JSON數(shù)據(jù)分為三種:對象類型、數(shù)組類型、混合類型。對象類型JSON數(shù)據(jù)用大括號包裹,屬性和值相對應(yīng)。數(shù)組類型JSON數(shù)據(jù)可以看成多個對象類型JSON數(shù)據(jù)組合在一起,用中括號包裹?;旌项愋蚃SON數(shù)據(jù)中既有對象類型又有數(shù)組類型,大括號表示的是對象,中括號表示的是數(shù)組。XML數(shù)據(jù)以標(biāo)簽的形式進(jìn)行存儲,通過標(biāo)簽名獲取值。所以無論是JSON解析還是XML解析,都可以先定義一個雙列集合出來,用于存放數(shù)據(jù)。
JSON數(shù)據(jù)類型:
在安卓環(huán)境下解析JSON數(shù)據(jù)有兩種方式,一種是自定義方法根據(jù)數(shù)據(jù)結(jié)構(gòu)分層解析,另一種是用開源框架。自定義方法進(jìn)行解析時,又可以分為對象解析、數(shù)組解析、綜合解析。對象解析較為簡單,先創(chuàng)建JSON對象,用對象的GetXxx()的方法獲取對應(yīng)的值,然后存儲在集合中,即獲取到JSON數(shù)據(jù)。數(shù)組解析先通過JsonArray對象獲取JSON對象,然后參照對象解析的方法。綜合解析則是在上述兩種解析基礎(chǔ)上完成的。根據(jù)JSON數(shù)據(jù)的結(jié)構(gòu),按照順序一次獲取JSON對象和JsonArray對象知道獲取到所需數(shù)據(jù)。用開源框架進(jìn)行解析基本原理類似,只不過需要提前進(jìn)行導(dǎo)包,并創(chuàng)建一個方法類來調(diào)用包里的內(nèi)容。
讀取對象類型的JSON數(shù)據(jù):
讀取數(shù)組類型的JSON數(shù)據(jù):
讀取綜合類型的JSON數(shù)據(jù):
用開源框架讀取JSON數(shù)據(jù)的目錄結(jié)構(gòu):
XML解析是邊讀邊解析,方法較為固定,從上到下依次解析。首先創(chuàng)建XmlPullParser解析器,利用解析器設(shè)置要解析的流對象。然后在一個循環(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ù)名相同時,用nextText()獲取數(shù)據(jù)。若是結(jié)束標(biāo)簽(END_TAG)將獲取的數(shù)據(jù)存入集合。最后一點(diǎn),不要忘記把標(biāo)簽移向下一個位置,即: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級", "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級", "week": "星期一", "date": "20140804" }, { "temperature": "28℃~36℃", "weather": "晴轉(zhuǎn)多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "東南風(fēng)3-4級", "week": "星期二", "date": "20140805" }, { "temperature": "27℃~35℃", "weather": "晴轉(zhuǎn)多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "東南風(fēng)3-4級", "week": "星期三", "date": "20140806" }, { "temperature": "27℃~34℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "東南風(fēng)3-4級", "week": "星期四", "date": "20140807" }, { "temperature": "27℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "東北風(fēng)4-5級", "week": "星期五", "date": "20140808" }, { "temperature": "26℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "北風(fēng)4-5級", "week": "星期六", "date": "20140809" }, { "temperature": "26℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "北風(fēng)4-5級", "week": "星期日", "date": "20140810" } ] }, "error_code": 0 }
解析其中的“future”數(shù)據(jù),結(jié)果如下:
XML原始數(shù)據(jù):
<?xml version="1.0" encoding="UTF-8" ?> <channel> <item> <title>軍報評徐才厚</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>來源:中國青年網(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> 來源:新京報, 看到正臉后放棄仍被捕 </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ū)別對比,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(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對象轉(zhuǎn)json功能示例
- JSON與XML的區(qū)別對比及案例應(yīng)用
- 如何在JS中實(shí)現(xiàn)相互轉(zhuǎn)換XML和JSON
- JSON與XML優(yōu)缺點(diǎn)對比分析
- jQuery基于ajax操作json數(shù)據(jù)簡單示例
- php+ajax+json 詳解及實(shí)例代碼
- Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法總結(jié)
- javascript解析ajax返回的xml和json格式數(shù)據(jù)實(shí)例詳解
相關(guān)文章
Android中oncreate中獲得控件高度或?qū)挾鹊膶?shí)現(xiàn)方法
這篇文章主要介紹了Android中oncreate中獲得控件高度或?qū)挾鹊膶?shí)現(xiàn)方法的相關(guān)資料,希望通過本文大家能實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊中顯示出來
App應(yīng)用越來越人性化,不僅界面優(yōu)美而且服務(wù)也很多樣化,操作也非常方便。通過本篇文章給大家介紹基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊中顯示出來,對android保存圖片相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12Android 自定義Dialog去除title導(dǎo)航欄的解決方法
今天小編就為大家分享一篇Android 自定義Dialog去除title導(dǎo)航欄的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Android應(yīng)用退出登錄的實(shí)現(xiàn)方法
每一個app都會有一個”退出登陸”的功能,當(dāng)點(diǎn)擊退出之后需要將所有的Activity都finish掉,開始是想將棧中的所有Activity清除掉,但是沒有找到方法,后來用廣播實(shí)現(xiàn)了。下面小編給大家分享android應(yīng)用退出登錄的實(shí)現(xiàn)方法,需要的朋友參考下2017-04-04Android賬號注冊實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計時效果
這篇文章主要為大家詳細(xì)介紹了Android賬號注冊過程中實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05Android控件ListView用法(讀取聯(lián)系人示例代碼)
本文以一個讀取聯(lián)系人的代碼為大家講解下Android控件中ListView的使用方法,這個listView有個setAdapter 適配器,里面可以直接實(shí)現(xiàn)接口,或者寫個類2013-06-06