程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 探討Android體系中解析JSON數據的方法

探討Android體系中解析JSON數據的方法

編輯:關於JAVA

探討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 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved