探討Android體系中解析JSON數據的方法。本站提示廣大學習愛好者:(探討Android體系中解析JSON數據的方法)文章只能為提供參考,不一定能成為您想要的結果。以下是探討Android體系中解析JSON數據的方法正文
媒介
愛好在媒介裡講一下本身的近況,也許能有共識的同窗,更多的是留給本身一個留念,幾個月或許幾年再回來看的時刻照樣會很有感歎。明天說說說話,json這類數據格局之前我做辦事器真個時刻每天接觸,無邪的認為json的世界裡只要php的json_encode和json_decode,明天當我做客戶真個時刻,居然快要一個多小時才弄定json的解析。這裡我不是鞭撻php利害,只是想說多學點器械,看看你不熟習的范疇,方能坦蕩本身的視野,方能曉得天外有天,方能曉得現在你看不上的任務其實你也紛歧定能很好的完成,扯多了,回來說解json
甚麼是json
json(Javascript Object Natation)是一種輕量級的數據交流格局,比擬xml這類數據交流格局來講,json絕對解析加倍簡略一些,是以客戶端和辦事器的數據交流格局常常經由過程json停止交流
json一共有兩種數據構造,一種是以(key/value)對情勢存在的無序的jsonObject對象,一個對象以“{”(左花括號)開端,“}”(右花括號)停止。每一個“稱號”後跟一個“:”(冒號); “稱號/值”對之間應用“,”(逗號)
例如:{”name“:"zhengyi.wzy"},這就是一個最簡略的json對象,關於這類數據格局,key值必需是String,而value則可所以String,Number,Object,Array等數據類型
另外一種數據格局就是有序的value的聚集,這類情勢被稱為是jsonArray,數組是值(value)的有序聚集。一個數組以”[“(左中括號)開端,”]“(右中括號)停止。值之間應用”,“(逗號)分隔
Android中json相干解析類
android的json解析部門都在包org.json下,重要有以下幾個類:
JSONObject
這是體系中有關JSON界說的根本單位,其包括一對(key/value)數值
它對內部(External:運用toString()辦法輸入的數值)挪用的呼應表現為一個尺度的字符串(例如:{“json”: “Hello, World”},最外被年夜括號包裹,個中的key和value被冒號”:”分隔)。其關於外部(Internal)行動的操作格局稍微,例如:初始化一個JSONObject實例,援用外部的put()辦法添加數值:new JSONObject().put(“json”, “Hello, World!”),在key和value之間是以逗號”,”分隔
value的類型包含: JSONObjects, JSONArrays, Strings, Booleans, Integers, Longs, Doubles or NULL
有兩種分歧的取值方法:
get():在肯定key存在的前提下應用,不然當沒法檢索到相干key時,將會拋出一個Exception異常信息
opt():這個辦法絕對比擬靈巧,當沒法獲得所指定命值時,將會前往一個默許值,其實不會拋出異常(小我推舉應用這個辦法)
JSONArray
它代表一組有序的數值。將其轉換為String輸入(toString)所表示的情勢是用方括號包裹,數值以逗號”,”分隔(例如:[”Alibaba“,”Baidu“,“Tecent”])
這個類的外部異樣具有查詢行動,get()和opt()兩種辦法都可以經由過程index索引前往指定的數值,put()辦法用來添加或許調換數值
異樣JSONArray的value類型可以包含:JSONObjects, JSONArrays, Strings, Booleans, Integers, Longs, Doubles or NULL
Android解析實例
客戶端普通從辦事器取得都是字符串,直接new一個JSONObject便可,參考法式以下
獲得json字符串
這個網址供給了json字符串:http://api.androidhive.info/contacts/, 我們可以開啟一個線程提議http要求,獲得json字符串,參考代碼以下:
private String getJsonByNetwork() { // You can get json by this url final String url = "http://api.androidhive.info/contacts/"; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); InputStream inputStream = null; String result = null; try { HttpResponse response = httpClient.execute(httpGet); inputStream = response.getEntity().getContent(); // Json is UTF-8 by default BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream, "UTF-8")); StringBuilder sb = new StringBuilder(); String tmp = null; while ((tmp = reader.readLine()) != null) { sb.append(tmp); } result = sb.toString(); } catch (Exception e) { try { if (inputStream != null) { inputStream.close(); } } catch (IOException se) { } } return result; }
解析json字符串
解析json字符串的步調普通以下所示:
(1) 創立JSONObject:
// Create a JSONObject JSONObject jsonObject = new JSONObject(result);
(2) 獲得JSONArray,遍歷JSONArray數組
// To get a specific JSONArray JSONArray jsonArray = jsonObject.getJSONArray("contacts"); // To get items from the array for (int i = 0; i < jsonArray.length(); i ++) { // TODO:Traverse the jsonarray }
(3) 獲得JSONObject
// Create a JSONObject JSONObject jsonObject = new JSONObject(result); // To get a specific JSONArray JSONArray jsonArray = jsonObject.getJSONArray("contacts"); // To get items from the array for (int i = 0; i < jsonArray.length(); i++) { // To get a specific JSONObject JSONObject oneObject = jsonArray.getJSONObject(i); }
(4)獲得特定字符串
// Create a JSONObject JSONObject jsonObject = new JSONObject(result); // To get a specific JSONArray JSONArray jsonArray = jsonObject.getJSONArray("contacts"); // To get items from the array for (int i = 0; i < jsonArray.length(); i++) { // To get a specific JSONObject JSONObject oneObject = jsonArray.getJSONObject(i); // To get a specific string String id = oneObject.getString("id"); String name = oneObject.getString("name"); Log.e("wzy", "id is:" + id + ", name is " + name); }
解析成果:
03-05 10:26:08.690: E/wzy(26401): id is:c200, name is Ravi Tamada 03-05 10:26:08.690: E/wzy(26401): id is:c201, name is Johnny Depp 03-05 10:26:08.690: E/wzy(26401): id is:c202, name is Leonardo Dicaprio 03-05 10:26:08.690: E/wzy(26401): id is:c203, name is John Wayne 03-05 10:26:08.691: E/wzy(26401): id is:c204, name is Angelina Jolie 03-05 10:26:08.691: E/wzy(26401): id is:c205, name is Dido 03-05 10:26:08.691: E/wzy(26401): id is:c206, name is Adele 03-05 10:26:08.692: E/wzy(26401): id is:c207, name is Hugh Jackman 03-05 10:26:08.693: E/wzy(26401): id is:c208, name is Will Smith 03-05 10:26:08.693: E/wzy(26401): id is:c209, name is Clint Eastwood 03-05 10:26:08.694: E/wzy(26401): id is:c2010, name is Barack Obama 03-05 10:26:08.694: E/wzy(26401): id is:c2011, name is Kate Winslet 03-05 10:26:08.695: E/wzy(26401): id is:c2012, name is Eminem