[開發] 在WP8上讀取XML/JSON的方法(1)
市面上(中文)的教學書似乎蠻少提到這塊的
(說起來Android也頗少見,而且我找到的幾本講的也不怎麼清楚......)
因為網路的Opendata、RSS和政府開放資料平台的資訊幾乎都是用這兩個類型
甚至如果是資訊介紹類的APP,
也可以利用這兩個格式把資料給獨立出來不用寫在程式裡面,
也許善加利用的話說不定就能做出還不錯的APP嘍(?
不過這篇文章偏長,這篇會先講解JSON與XML格式與寫法,
下篇再提怎麼用Windows Phone SDK來讀取
(這邊也要先提醒因為我目前只開發Windows Phone 8.0的APP,
7.0系的APP能不能這樣搞我還沒試過,若要開發7.0的可能要先測試一下才行)
(P.S. 用教學來搜索的話前面也有一篇講JSON與XML的,可以參考一下喔)
首先說明一下JSON的格式,
雖然網路上都找的到,不過還是略提一下
JSON格式的特點就是如名字般將一個物件資訊寫成Java Script的物件定義程式碼
首先是以{}來包住物件,其中再以「"屬性名稱": (屬性內容)」來包裝物件的屬性,
屬性內容可能包括以""來標記的字串、以true/false來標記的布林值、
以[]來標記的陣列值、甚至是再一個{}的物件或什麼都不加的數字
而這些屬性會以「,」來隔開。
(注意一下屬性名稱都是字串,所以要用""標記起來)
以我的空氣品質APP而言,
我從環保署的網站接收的JSON資料的其中一個物件就會標記成這樣:
{
"SiteName":"二林",
"County":"彰化縣",
"PSI":"60",
"MajorPollutant":"懸浮微粒",
"Status":"普通",
"SO2":"5",
"CO":".44",
"O3":"50",
"PM10":"71",
"PM2.5":"31",
"NO2":"19",
"WindSpeed":"2.03",
"WindDirec":"44.32",
"PublishTime":"2014-02-06 20:00"
}
雖然我有分段與縮排,但JSON的格式其實不需要這樣,
只要有照上面的要求隔開來,一長串的字串都沒問題。
怎麼寫JSON檔呢?基本上普通的記事本就萬事OK,
Visual Studio也有支援格式化的JSON編輯,不過還是自己手打會比較快。
基本上照著規定來寫準沒錯。
屬性名稱的部分,你知道那是甚麼就沒關係。
-----------------------------------
XML則是另外一種類型,
有接觸過網頁的應該都會知道網頁用的是<HTML></HTML>這類的標籤
XML也是差不多的格式,但是比起HTML,
因為XML本身「毫無反應,就只是個資料」,
亦即你直接開XML,他也真的只會給你看一堆冷冰冰的標籤與資料,
所以撰寫XML時不需要去思考「怎麼讓資料變的花俏引人注目」,
只需要去思考怎麼讓你的資料容易被人(當然包括自己)搞清楚怎麼塞的就好。
這邊我就以我的航太APP為例,
裡面的格式是這個樣子:
<?xml version="1.0" encoding="utf-8" ?>
<Satellites>
<Satellite ID="FORMOSAT-1">
<Name>
<Language lang="zh-TW" value="福爾摩沙衛星一號(中華衛星一號)" />
<Language lang="en-US" value="FORMOSAT-1" />
</Name>
<Code>FORMOSAT-1(ROCSAT-1)</Code>
<Status>RETIRED</Status>
<Image>
<Icon>Formosat-1_Icon.png</Icon>
<Wide></Wide>
<Intro>http ://***********.jpg</Intro>
</Image>
<Date>
<Launch Year="1998" Month="1" Day="27" Hour="" Minute="" Second=""
Result="Success"/>
<Retire Year="2004" Month="6" Day="17" Hour="" Minute="" Second=""/>
</Date>
</Satellite>
(以下省略)
</Satellites>
基本上第一行的<?xml version="1.0" encoding="utf-8" ?>是XML必備宣告
不宣告的話開資料的就不知道這是個XML檔,有可能會發生不明錯誤,
除此之外只有幾個比較需要注意:
1. 最外層的<Satellites></Satellites>是根標籤,
一個XML只能有一個,超過的話系統解讀時就會跟你報錯
(一個國家有兩三個總統不會大亂內戰才怪吧?同理可證)
2. 從裡面的資料也看得出來,根標籤底下的標籤要怎樣處理可以自訂,
格式也沒有一定規範,更因為沒有像HTML與XAML那樣還要負擔顯示資料的責任
(謎:說的好像XML很不負責任似的)
幾乎可說是想怎麼寫就怎麼寫
(只要你看得懂就好,但是如果要跟他人共享資料的話資料結構就要定下來不能亂改)
3. XML一定要有開始標籤與結尾標籤,如果標籤要單個結尾的話,
這個標籤最後要以「/>」作為結束,不然系統解讀時也會跟你報錯。
4. HTML在屬性的規定上非常寬鬆,可以不用加雙引號,有的甚至連等號也可以不用,
但在XML這套可行不通,一定要乖乖寫成「屬性名稱="屬性內容"」,
否則系統解讀時也會直接報錯。
(系統報錯有多嚴重呢?
至少是你在偵錯的時候會停下來要你解決,實機運作時會直接閃退導致過不了審查)
因為XML出現的比較早,大多數程式語言編輯軟體都支援XML的編輯,
(當然記事本一樣OK)
甚至也有像是Code Writer這種Win8 APP可以幫助編寫
(很可惜的是根據開發公司的說法,受限於API的不足,Code Writer沒辦法使用IME,
也就是說在Code Writer中只能輸入英文,中文要自己另外開記事本處理)
(Android本身介面布置檔就是用XML寫的這點應該很多教學書籍都有提到)
這些編輯程式也會很盡責的提醒你哪裡寫錯了,
比較高階一些的還會自動產生出可以摺疊的+-樹狀圖讓你更容易知道架構與編輯XML
此外,EXCEL(至少2007家用版)也可以透過開啟開發人員選項,
讀入已經自訂好格式的XSD/XML格式後,
自動產生出XML檔,這樣就可以不用老是自己手動打那些重複標籤了。
(當時用這個功能把一整個高達50000多行的XLS票價檔自動轉成一個XML真讓我感動到哭)
---------------------------------------------------------------
由於Windows 8.1現在的APP範本資料檔都改成用JSON檔,新增刪除都比較容易了
也許接觸到JSON的可能性會比較高,而且XML字量以及一目不了然度都比JSON還要多要大
JSON編寫的簡易程度也比XML高,或許可能會有人覺得XML好像沒甚麼用,
但並不是真的如此,資料檔要用什麼格式是你的自由
如果要我區分一下用途的話,我會這麼想:
格式較簡單,沒有太多階層的話適合用JSON;
格式較複雜,會有多階層的話還是比較適合用XML
雖然說JSON也可以物件裡面再包一個物件或陣列,
但好幾層編輯起來反而更容易變得比XML還難懂,因為結構整個複雜化了
若是這種情況還是用XML會比較好吧?
(當然也可以用各種方式來讓結構單純化啦)
不過不管怎樣,資料的收集、取捨與編寫是很重要的一件事
有心做APP的人千萬別小看這點了喔
(寫到這邊又會想起怎麼好像大部分教寫APP的書都不會特別提到這種事呢......)
讀取XML與JSON檔的方法下篇繼續(汗
--
要奉命結婚? 還是要尋找自己的幸福?
├────┤ ├────┤
├────┤
├────┤ ├────<═══
by kudo070125
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.44.64
推
02/06 21:49, , 1F
02/06 21:49, 1F
※ 編輯: hoyunxian 來自: 111.250.44.64 (02/06 21:50)
推
02/06 21:52, , 2F
02/06 21:52, 2F
推
02/06 21:54, , 3F
02/06 21:54, 3F
→
02/06 22:02, , 4F
02/06 22:02, 4F
→
02/06 22:26, , 5F
02/06 22:26, 5F
→
02/06 22:27, , 6F
02/06 22:27, 6F
→
02/06 22:27, , 7F
02/06 22:27, 7F
推
02/06 22:39, , 8F
02/06 22:39, 8F
推
02/06 22:59, , 9F
02/06 22:59, 9F
推
02/06 23:40, , 10F
02/06 23:40, 10F