Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 階段一:解析JSON,:解析JSON

階段一:解析JSON,:解析JSON

編輯:關於android開發

階段一:解析JSON,:解析JSON


“階段一”是指我第一次系統地學習Android開發。這主要是對我的學習過程作個記錄。

 

最近學到解析JSON格式的網絡數據,而作業也要求自己找一個天氣預報的API地址,然後解析其中JSON格式的數據。可能是因為找的是免費的API地址,在百度APIStore裡的,它那JSON返回示例的數據,跟我獲取之後,打Log顯示出來的有些差異,這只是吐槽一下哈。另外,推薦初學者到“聚合數據”這個網站看一下那裡的示例代碼,寫得很規范,思路、注解都很清楚。

因為第一次做解析JSON,而且這個API的數據還蠻復雜,在解析、讀取的時候,寫著寫著就蒙圈了。所以這次主要是分享一下,我是如何理解解析JSON的方法和怎樣獲取其中的數據,數據格式由簡單到復雜。而其基本語法,可以查看百度百科,那裡面講得很詳細。

以下分析,都是基於這個假設,請求的數據都轉換為String類型,並保存在content變量中。

1、{"resultcode": "200", "reason": "查詢成功!"}

這種情況最好理解,只要JSONObject response = new JSONObject(content)String result = response.getString("resultcode");而我是這麼理解的,一對花括號{}就代表一個對象,所以response是這條數據的JSONObject,當實現這個對象之後,就當作這個花括號{}被去除掉了,這麼想得話,對於理解復雜的數據時或有幫助。當“值”的位置(即冒號後面的字符串)沒有任何括號時,就可以調用get方法來取值。

2、{"resultcode": "200", "reason": "查詢成功!", "future": [ { "temperature": "28℃~36℃", "weather": "晴轉多雲" } ] }

而當“值”的位置有方括號[]時(跟數組類似),就要用上一級的對象調用getJSONArray("future"),這裡就是response,當執行了這一步,也可以當作把方括號去掉。方括號[]裡,每一對花括號{}也代表一個對象,它也有下標,也是從0開始。

所以取temperature的代碼是:

JSONObject response = new JSONObject(content);// ==> "resultcode": "200", "reason": "查詢成功!", "future": [ { "temperature": "28℃~36℃", "weather": "晴轉多雲" } ]

JSONArray future= response.getJSONArray("future");// ==> { "temperature": "28℃~36℃", "weather": "晴轉多雲" }

JSONObject futureObject= future.getJSONObject(0);// ==> "temperature": "28℃~36℃", "weather": "晴轉多雲" 

String temperature= futureObject.getString("temperature");

3、{ "resultcode": "200",

    "reason": "查詢成功!",

    "today": { "city": "天津", "date_y": "2014年03月21日", "week": "星期五", "temperature": "8℃~20℃", "weather": "晴轉霾",  "weather_id": {  "fa": "00",  "fb": "53" } },

    "future": [ { "temperature": "28℃~36℃", "weather": "晴轉多雲", "weather_id": { "fa": "00", "fb": "01" }, "wind": "南風3-4級", "week": "星期一", "date": "20140804" },

        { "temperature": "28℃~36℃", "weather": "晴轉多雲", "weather_id": { "fa": "00", "fb": "01" }, "wind": "東南風3-4級", "week": "星期二", "date": "20140805" }

        ]

  }

(1)讀"today"裡的"city"

JSONObject response = new JSONObject(content);// ==>同上

JSONObject today= reponse.getJSONObject("today");// ==> "city": "天津", "date_y": "2014年03月21日", "week": "星期五", "temperature": "8℃~20℃", "weather": "晴轉霾",  "weather_id": {  "fa": "00",  "fb": "53" }

String city= today.getString("city");

(2)讀"future"的第二個"temperature"的"weather_id"的"fa"

JSONObject response = new JSONObject(content);// ==>同上

JSONArray future= response.getJSONArray("future");

JSONObject futureObject= future.getJSONObject(1);// ==> "temperature": "28℃~36℃", "weather": "晴轉多雲", "weather_id": { "fa": "00", "fb": "01" }, "wind": "東南風3-4級", "week": "星期二", "date": "20140805"

JSONObject weather_id= futureObject.getJSONObject("weather_id");// ==> "fa": "00", "fb": "01"

String id= weather_id.getString("fa");

總結:對於解析JSON,我是把它理解成是一個不斷去括號的過程。先找到你要獲取的數據,然後從最外層開始,一層層的剝。有花括號{}的就getJSONObect(除最外層的,最外層的是new JSONObject,這也是第一步要做的),有方括號[]的就getJSONArray。直到“值”的位置沒有任何括號時,就能讀取數據了。。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved