最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

 更新時間:2015年07月31日 15:37:20   作者:zinss26914  
這篇文章主要介紹了探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式,文中講到了使用Java代碼實現(xiàn)的處理JSON的一些主要方法,需要的朋友可以參考下

前言
喜歡在前言里講一下自己的現(xiàn)狀,或許能有共鳴的同學,更多的是留給自己一個紀念,幾個月或者幾年再回來看的時候還是會很有感慨。今天說說語言,json這種數(shù)據(jù)格式之前我做服務器端的時候天天接觸,天真的以為json的世界里只有php的json_encode和json_decode,今天當我做客戶端的時候,竟然將近一個多小時才搞定json的解析。這里我不是抨擊php好壞,只是想說多學點東西,看看你不熟悉的領域,方能開闊自己的視野,方能知道天外有天,方能知道當初你看不上的工作其實你也不一定能很好的完成,扯多了,回來講解json


什么是json
json(Javascript Object Natation)是一種輕量級的數(shù)據(jù)交換格式,相比xml這種數(shù)據(jù)交換格式來說,json相對解析更加簡單一些,因此客戶端和服務器的數(shù)據(jù)交換格式往往通過json進行交換

json一共有兩種數(shù)據(jù)結構,一種是以(key/value)對形式存在的無序的jsonObject對象,一個對象以“{”(左花括號)開始,“}”(右花括號)結束。每個“名稱”后跟一個“:”(冒號); “名稱/值”對之間使用“,”(逗號)

2015731153703523.png (690×150)

例如:{”name“:"zhengyi.wzy"},這就是一個最簡單的json對象,對于這種數(shù)據(jù)格式,key值必須是String,而value則可以是String,Number,Object,Array等數(shù)據(jù)類型

2015731153726475.png (691×325)

另一種數(shù)據(jù)格式就是有序的value的集合,這種形式被稱為是jsonArray,數(shù)組是值(value)的有序集合。一個數(shù)組以”[“(左中括號)開始,”]“(右中括號)結束。值之間使用”,“(逗號)分隔

2015731153747720.png (686×156)

Android中json相關解析類
android的json解析部分都在包org.json下,主要有以下幾個類:

JSONObject
這是系統(tǒng)中有關JSON定義的基本單元,其包含一對(key/value)數(shù)值

它對外部(External:應用toString()方法輸出的數(shù)值)調(diào)用的響應體現(xiàn)為一個標準的字符串(例如:{“json”: “Hello, World”},最外被大括號包裹,其中的key和value被冒號”:”分隔)。其對于內(nèi)部(Internal)行為的操作格式略微,例如:初始化一個JSONObject實例,引用內(nèi)部的put()方法添加數(shù)值:new JSONObject().put(“json”, “Hello, World!”),在key和value之間是以逗號”,”分隔

value的類型包括: JSONObjects, JSONArrays, Strings, Booleans, Integers, Longs, Doubles or NULL

有兩種不同的取值方式:

    get():在確定key存在的條件下使用,否則當無法檢索到相關key時,將會拋出一個Exception異常信息
    opt():這個方法相對比較靈活,當無法獲取所指定數(shù)值時,將會返回一個默認值,并不會拋出異常(個人推薦使用這個方法)


JSONArray
它代表一組有序的數(shù)值。將其轉換為String輸出(toString)所表現(xiàn)的形式是用方括號包裹,數(shù)值以逗號”,”分隔(例如:[”Alibaba“,”Baidu“,“Tecent”])

這個類的內(nèi)部同樣具有查詢行為,get()和opt()兩種方法都可以通過index索引返回指定的數(shù)值,put()方法用來添加或者替換數(shù)值

同樣JSONArray的value類型可以包括:JSONObjects, JSONArrays, Strings, Booleans, Integers, Longs, Doubles or NULL


Android解析實例
客戶端一般從服務器獲得都是字符串,直接new一個JSONObject即可,參考程序如下

獲取json字符串
這個網(wǎng)址提供了json字符串:http://api.androidhive.info/contacts/, 我們可以開啟一個線程發(fā)起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) 創(chuàng)建JSONObject:

  // Create a JSONObject 
  JSONObject jsonObject = new JSONObject(result); 


(2) 獲取JSONArray,遍歷JSONArray數(shù)組

  // 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 

相關文章

  • Java中Cookie和Session的那些事兒

    Java中Cookie和Session的那些事兒

    Cookie和Session都是為了保持用戶的訪問狀態(tài),一方面為了方便業(yè)務實現(xiàn),另一方面為了簡化服務端的程序設計。這篇文章主要介紹了java中cookie和session的知識,需要的朋友可以參考下
    2016-09-09
  • Java數(shù)據(jù)結構之KMP算法詳解以及代碼實現(xiàn)

    Java數(shù)據(jù)結構之KMP算法詳解以及代碼實現(xiàn)

    KMP算法是一種改進的字符串匹配算法,核心是利用之前的匹配失敗時留下的信息,選擇最長匹配長度直接滑動,從而減少匹配次數(shù)。本文主要介紹了KMP算法的原理與實現(xiàn),需要的可以參考一下
    2022-12-12
  • java swagger ui 添加header請求頭參數(shù)的方法

    java swagger ui 添加header請求頭參數(shù)的方法

    今天小編就為大家分享一篇java swagger ui 添加header請求頭參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • spring+netty服務器搭建的方法

    spring+netty服務器搭建的方法

    本篇文章主要介紹了spring+netty服務器搭建的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • java實現(xiàn)簡單控制臺通訊錄

    java實現(xiàn)簡單控制臺通訊錄

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單控制臺通訊錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 四個Java常見分布式鎖的選型和性能對比

    四個Java常見分布式鎖的選型和性能對比

    當涉及到分布式系統(tǒng)中的并發(fā)控制和數(shù)據(jù)一致性時,分布式鎖是一種常見的解決方案,本文將對幾種常見的分布式鎖實現(xiàn)原理、實現(xiàn)示例、應用場景以及優(yōu)缺點進行詳細分析,需要的可以參考一下
    2023-05-05
  • 查找jdk安裝路徑并且切換多版本jdk的詳細步驟

    查找jdk安裝路徑并且切換多版本jdk的詳細步驟

    在日常的工作學習中可能需要用到不同版本的jdk,下面這篇文章主要給大家介紹了關于查找jdk安裝路徑并且切換多版本jdk的詳細步驟,文中介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)答答租車系統(tǒng)

    Java實現(xiàn)答答租車系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)答答租車系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java實現(xiàn)排球比賽計分系統(tǒng)

    Java實現(xiàn)排球比賽計分系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)排球比賽計分系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺談java隨機數(shù)的陷阱

    淺談java隨機數(shù)的陷阱

    這篇文章主要介紹了淺談java隨機數(shù)的陷阱,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論

北安市| 邛崃市| 平邑县| 海兴县| 台南县| 繁昌县| 兴文县| 怀来县| 鹤岗市| 昭觉县| 和顺县| 枣阳市| 梁河县| 开鲁县| 灵川县| 故城县| 蕉岭县| 柏乡县| 桃园县| 漳州市| 兴义市| 正宁县| 双江| 靖宇县| 安阳县| 疏附县| 山阳县| 鲁山县| 阿荣旗| 鄯善县| 汾阳市| 满城县| 平罗县| 嘉义市| 新乡县| 尚义县| 东方市| 平度市| 肥乡县| 灵川县| 安康市|