JSON解析之——Android

來源:互聯網
上載者:User

標籤:

JSON解析之——Android

一、google天氣案例

之前xml學習中的google天氣的例子非常形象,所以我們繼續以google天氣作為案例進行學習,下面是我從google官網下載下來的天氣Json檔案,可以看出,和xml的格式區別非常大。

 1 {   "coord":{"lon":121.46,"lat":31.22}, 2     "weather":[{ 3         "id":721, 4         "main":"Haze", 5         "description":"haze", 6         "icon":"50d"}], 7     "base":"stations", 8     "main": 9         {"temp":282.15,10         "pressure":1024,11         "humidity":82,12         "temp_min":282.15,13         "temp_max":282.15},14     "visibility":4500,15     "wind":{"speed":5,"deg":310},16     "clouds":{"all":44},17     "dt":1450060200,18     "sys":{19         "type":1,20         "id":7452,21         "message":0.0142,22         "country":"CN",23         "sunrise":1450046656,24         "sunset":1450083169},25     "id":1796236,26     "name":"Shanghai",27     "cod":20028  }

 我們需要的資料有:城市 最低溫度 最高溫度 濕度  風向

於是我們建立一個CurrentWeatherJson類來儲存需要的資料。

 1 package org.xerrard.xmlpulldemo; 2  3 public class CurrentWeatherJson { 4  5      6     public String   city;              //城市 7     public String   temperature_min;       // 溫度 8     public String   temperature_max;       // 溫度 9     public String   humidity;           // 濕度10     public String   wind_direction;     // 風向11     12     public String toString()13     {14         //攝氏度(℃)=K-273。15         float temperatureMin = Float.parseFloat(temperature_min)-272.15f;16         float temperatureMax = Float.parseFloat(temperature_max)-272.15f;17         18         StringBuilder sb = new StringBuilder();19         sb.append(" 城市: ").append(city);20         sb.append(" 最低溫度: ").append(temperatureMin + "").append(" °C");21         sb.append(" 最高溫度: ").append(temperatureMax + "").append(" °C");22         sb.append(" 濕度 ").append(humidity);23         sb.append(" 風向 ").append(wind_direction);24         return sb.toString();25     }26 }

然後我們建立一個資料模型來封裝Json資料的解析,在WeatherJsonModel中,我們可以將Json中我們需要的資料解析出來,儲存到CurrentWeatherJson對象中

 

 1 package org.xerrard.xmlpulldemo; 2  3 import org.json.JSONException; 4 import org.json.JSONObject; 5 import org.json.JSONTokener; 6  7 public class WeatherJsonModel { 8  9     public static CurrentWeatherJson getData(String json){10         JSONTokener jsonParser = new JSONTokener(json);11         JSONObject weather;12         try {13             weather = (JSONObject) jsonParser.nextValue();14             if(weather.length()>0){15                 CurrentWeatherJson curCondition = new CurrentWeatherJson();16                 curCondition.city = weather.getString("name");17                 curCondition.humidity = weather.getJSONObject("main").getInt("humidity") + "";18                 curCondition.temperature_max = weather.getJSONObject("main").getInt("temp_max") + "";19                 curCondition.temperature_min = weather.getJSONObject("main").getInt("temp_min") + "";20                 curCondition.wind_direction = weather.getJSONObject("wind").getInt("deg") + "";21             }22         }23         catch (JSONException e) {24             // TODO Auto-generated catch block25             e.printStackTrace();26         }27         return curCondition;    28         29        30 31     }32     33 }

最後,我們可以使用WeatherJsonModel來進行解析資料,並得到我們需要的資料

 1         File jsonFlie = new File(Environment.getExternalStorageDirectory().getPath() + "/" +"weather.json");  2         CharBuffer cbuf = null;   3         FileReader fReader; 4         try { 5             fReader = new FileReader(jsonFlie); 6             cbuf = CharBuffer.allocate((int) jsonFlie.length());   7             fReader.read(cbuf);   8             String text = new String(cbuf.array());   9             TextView hello = (TextView)findViewById(R.id.hello);10             hello.setText(WeatherJsonModel.getData(text).toString());11         }12         catch (FileNotFoundException e) {13             // TODO Auto-generated catch block14             e.printStackTrace();15         }16         catch (IOException e) {17             // TODO Auto-generated catch block18             e.printStackTrace();19         }  

 

二、android中JSON提供的幾個比較重要的類

android的json解析部分都在包org.json下,主要有以下幾個類:
JSONObject:可以看作是一個json對象,這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。它對外部(External: 應用toString()方法輸出的數值)調用的響應體現為一個標準的字串(例如:{"JSON": "Hello, World"},最外被大括弧包裹,其中的Key和Value被冒號":"分隔)。其對於內部(Internal)行為的操作格式略微,例如:初始化一個JSONObject執行個體,引用內部的put()方法添加數值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之間是以逗號","分隔。Value的類型包括:Boolean、JSONArray、JSONObject、Number、String或者預設值JSONObject.NULL object 。

JSONStringer:json文本構建類 ,根據官方的解釋,這個類可以協助快速和便捷的建立JSON text。其最大的優點在於可以減少由於 格式的錯誤導致程式異常,引用這個類可以自動嚴格按照JSON文法規則(syntax rules)建立JSON text。每個JSONStringer實體只能對應建立一個JSON text。。其最大的優點在於可以減少由于格式的錯誤導致程式異常,引用這個類可以自動嚴格按照JSON文法規則(syntax rules)建立JSON text。每個JSONStringer實體只能對應建立一個JSON text。

JSONArray:它代表一組有序的數值。將其轉換為String輸出(toString)所表現的形式是用方括弧包裹,數值以逗號”,”分隔(例如: [value1,value2,value3],大家可以親自利用簡短的代碼更加直觀的瞭解其格式)。這個類的內部同樣具有查詢行為, get()和opt()兩種方法都可以通過index索引返回指定的數值,put()方法用來添加或者替換數值。同樣這個類的value類型可以包括:Boolean、JSONArray、JSONObject、Number、String或者預設值JSONObject.NULL object。

JSONTokener:json解析類
JSONException:json中用到的異常

 

 三、對於複雜的JSON資料的解析,google提供了Gson來處理。

 

參考資料:

google weather api : http://openweathermap.org/current

http://blog.csdn.net/onlyonecoder/article/details/8490924  android JSON解析詳解

 

JSON解析之——Android

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.