JSON資料格式分析
1、JSON介紹
JSON是一種資料結構比較簡單,輕量級的,易於儲存的資料結構形式。很方便人的閱讀,也方便機器的編寫和解析。
JSON是一種完全獨立於文本語言的文本結構,我們既可以在js代碼中寫json資料,也能在java、php等語言中使用這種文本形式。
2、JSON結構分析
JSON只有兩種資料結構模型:數組和對象。數組常用的表示是JSONArray,對象常用的表示是JSONObject。
JSON的儲存結構採用的是索引值對的形式表現的,熟悉JAVA開發的人應該很清楚,是實際上是map的儲存方式,一個key對應一個value。當然,在不同語言中,可能理解方式上會有不同的差異,的資料結構中可能被理解為資料字典,C中可能被理解為結構體等資料類型。關於這個,等下我們會舉例說明。
3、JSON資料舉例
可能有的人對json資料形式並不熟悉,這裡給出一個json資料的樣本,這是從一段代碼中截取出來的內容,可能大家看起來會覺得很奇怪,但是這是一個完整的json格式的字串,包括了json定義的兩中資料格式,數組和對象:
{id: 20150104A000SB00,thumbnails_qqnews: [http://inews.gtimg.com/newsapp_ls/0/34260782_150110/0],thumbnails: [http://inews.gtimg.com/newsapp_ls/0/34260782_150110/0],articletype: 0,timestamp: 1420373100,time: 2015-01-04 20:05:00,commentid: 1074737367,url: www.bkjia.comtitle: 武媚娘傳奇→武大頭傳奇,tag: [ ],abstract: 男人在年輕的時候都希望能擁有一個花枝招展,外表光鮮亮麗的那種女人。可是隨著歲月的沉澱,尤其是當他有了自己的一番事業和豐富的人生閱曆時,就會發現自己當初的想法是多麼幼稚,因為,一個根本就不夠!,author: [ ],chlid: 1796,origUrl: www.bkjia.comshow_expr: 1,flag: 0,picShowType: 0,chlname: 捧腹網,chlmrk: 精選搞笑圖片,無節操、有內涵、巨邪惡、神回複,看點多,笑點多!,chlsicon: www.bkjia.comchlicon: www.bkjia.comsource: 捧腹網,wechat: pengfuwang001,PlacementId: 9079537218569440795,SubAdOn: 0,commentPlacementId: ,openAdsComment: 0}
4、解析方式
在不同的語言中,可能有不同的解析方式,這裡我們只討論在Android環境中的解析方式,與java中是一致的。
前面我們說過,JSON是採用的map集合形式的封裝,是索引值對的形式,那麼我們在取出資料的時候,就會採用get方法,如下兩句代碼:
JSONObject jsonObject = new JSONObject(jsonString);JSONObject msgJsonObject = jsonObject.getJSONObject(msg);
這兩句代碼的意思是說,我們將獲得的json字串,執行個體化成為一個json對象,然後在這個json對象中,擷取得到msg這個對象。
JSONArray temp = product.getJSONArray(photos);int length = temp.length();for (int i = 0; i < length; i++) {String msg = temp.optString(i);imgList.add(msg);}這段代碼的意思是從product這個json對象中,獲得一個名為photos的json數組對象,然後將之儲存在一個集合中。
product.getString(title)
這一句代碼就比較簡單容易理解了,意思是擷取一個title的對象,而這個對象是一個String類型的對象。
5、總結
在上面的json解析中,我們只是簡單的抽取了一些比較重要的程式碼片段,並沒有完整的展示如何解析一段代碼,這裡有兩個問題需要注意:
(1)、在處理json字串的時候,需要處理一個異常,名為JSONException,通常是json的資料格式不對或者資料不完整。
(2)、在擷取json字串中的值的時候,如果試用get擷取,可能會出現該字串不存在而導致報錯的情況,可以試用opt擷取,代碼如下:
product.optString(title)
但是這裡會出現一個問題,那就是如果沒有title這個字串對象,這句話也是不會報錯的,但是程式的執行結果卻不是我們預期那樣的。