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

Android隨手筆記44之JSON數(shù)據(jù)解析

 更新時間:2015年12月23日 10:03:12   作者:依舊淡然  
本文將主要介紹在Android開發(fā)中,如何在服務器端創(chuàng)建JSON數(shù)據(jù),以及如何在Android客戶端對JSON數(shù)據(jù)進行解析,對android json解析 相關知識感興趣的朋友一起學習吧

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于語言的文本格式,為Web應用開發(fā)提供了一種理想的數(shù)據(jù)交換格式。

  本文將主要介紹在Android開發(fā)中,如何在服務器端創(chuàng)建JSON數(shù)據(jù),以及如何在Android客戶端對JSON數(shù)據(jù)進行解析。

1.JSON數(shù)據(jù)結構

  在JSON中有兩種數(shù)據(jù)結構:對象和數(shù)組。

1.1對象

  在JSON中,一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號),冒號后是該名稱的值,多個“名稱:值”之間使用 “,”(逗號)分隔開來。名稱需要使用雙引號括起來,值如果是字符串則必須用雙引號括起來,如果是數(shù)值型則不需要。其結構示意圖如圖1所示。 


圖1 JSON對象結構示意圖

  如下的代碼是一個簡單的JSON對象示例:

   {
   "id":,
   "name":"jack",
   "age":
   }

1.2數(shù)組

  在JSON中,數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用 “,”(逗號)分隔開來。其結構示意圖如圖2所示。

 

圖2 JSON數(shù)組結構示意圖

  如下的代碼是一個簡單的JSON數(shù)組示例:

  ["北京","上海","廣州"]

1.3值的類型

  在JSON的對象和數(shù)組結構中,value值不僅可以是數(shù)字、字符串等簡單數(shù)據(jù)類型,還可以是對象、數(shù)組等,如圖3所示。


圖3 JSON中值的類型

  因此,我們可以使用對象和數(shù)組的組合構成復雜的數(shù)據(jù)結構。如下的代碼使用對象結構定義了一個“students”對象,在“students”對象中包含了一個學生數(shù)組,而學生數(shù)組中的值又是JSON對象。

   {
     "students":
     [
     {"name":"jack","age":},
     {"name":"rose","age":}
     ]
   } 

2.在服務器端生成JSON數(shù)據(jù)

  通常,客戶端在請求服務器數(shù)據(jù)時,服務器可以使用XML文檔、JSON數(shù)據(jù)或HTML的形式將數(shù)據(jù)發(fā)送給客戶端。

  那么如何在服務器端生成JSON數(shù)據(jù)呢?首先需要完成以下兩個準備工作。

 ?。?)我們需要使用MyEclipse創(chuàng)建了一個Web Project,這里我將該工程命名為了“JsonDemoProject”,用來模擬服務器端的Web服務。

 ?。?)我們還需要在該工程中導入JSON的API數(shù)據(jù)包json-lib-2.2.2-jdk15.jar。

  在JSON的API中,提供了JSONObject類,通過調用JSONObject類的put(Object key, Object value)方法,可以將一個Object對象以鍵值對的形式存入JSONObject對象。通過調用JSONObject類的toString()方法,則可以將JSONObject對象轉化為JSON數(shù)據(jù)。

  如下的代碼創(chuàng)建了一個JsonTools類,并實現(xiàn)了靜態(tài)方法createJsonString(),用來生成JSON數(shù)據(jù)。

 public class JsonTools {
     /*
      * Function :  生成JSON數(shù)據(jù)
      * Param   :  key    Json數(shù)據(jù)的鍵值
      *       object   要生成Json數(shù)據(jù)的內容
      * Retuen  :  JSON數(shù)據(jù)
      * Author  :  博客園-依舊淡然
      */
     public static String createJsonString(String key, Object value) {
       JSONObject jsonObject = new JSONObject();  //創(chuàng)建一個JSONObject對象
       jsonObject.put(key, value);         //往JSONObject對象中填入內容
       return jsonObject.toString();        //生成JSON數(shù)據(jù)并返回
     }   
   } 

  通過使用該方法,我們可以很方便的將各種數(shù)據(jù)傳遞進來,并將其轉化成JSON數(shù)據(jù)。比如,我們可以在JsonService類中,實現(xiàn)一個簡單的獲取Person對象列表的方法,具體如下:

 /*
    * Function :  獲取Person對象列表
    * Author  :  博客園-依舊淡然
    */
   public List<Person> getListPerson() {
     List<Person> list = new ArrayList<Person>();
     Person person = new Person(, "jack", );
     Person person = new Person(, "rose", );
     Person person = new Person(, "bob", );
     list.add(person);
     list.add(person);
     list.add(person);
     return list;
   } 

  其中,Person對象具有id(int)、name(String)和age(int)三個屬性。

  最后,我們可以創(chuàng)建一個繼承自HttpServlet的JsonAction類,并實現(xiàn)其中的doPost()方法,用來響應客戶端對服務器的請求。具體如下:

 public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     response.setContentType("text/html;charset=utf-");
     request.setCharacterEncoding("utf-");
     response.setCharacterEncoding("utf-");
     PrintWriter out = response.getWriter();
     List<Person> listPerson = jsonService.getListPerson();
     String str = null;
     String action_flag = request.getParameter("action_flag");  //獲取URL參數(shù)
     if(action_flag.equals("persons")) {
       str = JsonTools.createJsonString("persons", listPerson);
     }
     out.println(str);
     out.flush();
     out.close();
   }

  可以看到,在doPost()方法中,我們通過調用getListPerson()方法獲得了Person對象列表listPerson,并將其傳入JsonTools.createJsonString()方法中,從而獲得了一串JSON數(shù)據(jù)。

  將該工程發(fā)布到Tomcat上,使用瀏覽器訪問該Web工程,可以看到如圖4所示的界面,Person對象列表被成功的轉化成了JSON數(shù)據(jù)。

 

圖4 生成的JSON數(shù)據(jù)

3.在客戶端解析JSON數(shù)據(jù)

  通過上面的步驟,我們已經(jīng)在服務器上生成了JSON數(shù)據(jù)。要在我們的Android工程中獲取該JSON數(shù)據(jù)是很容易的,只需要利用Android為我們提供的HttpURLConnection接口訪問圖4所示的URL即可。

  那么,獲取到服務器上的JSON數(shù)據(jù)以后,如何在Android工程中完成對該JSON數(shù)據(jù)的解析呢?

  觀察圖4所示的JSON數(shù)據(jù)可以看出:

 ?。?)該JSON數(shù)據(jù)的最外層是JSONObject,JSONObject的鍵是“persons”,值是一個JSONArray。

  (2)在JSONArray中又包含了3個JSONObject對象。

  (3)而在內嵌的每一個JSONObject對象中,都有3個鍵值對的組合。

  分析清楚了JSON數(shù)據(jù)的構成形式之后,就可以開始著手對其進行解析了。在Android工程中,我們可以創(chuàng)建一個JsonTools類,并實現(xiàn)getListPerson()類方法,用來完成把從服務器獲得的Json數(shù)據(jù)解析出來,還原成Person對象列表。具體

代碼如下所示:

  /*
    * Function :  解析JSON數(shù)據(jù),還原成Person對象列表
    * Param   :  key      Json數(shù)據(jù)的鍵值
    *        jsonString   從服務器獲得的Json數(shù)據(jù)
    * Retuen  :  Person對象列表
    * Author  :  博客園-依舊淡然
    */
   public static List<Person> getListPerson(String key, String jsonString) {
     List<Person> list = new ArrayList<Person>();
     try {
       JSONObject jsonObject = new JSONObject(jsonString);     //創(chuàng)建JSONObject對象
       JSONArray personArray = jsonObject.getJSONArray(key);    //獲取JSONObject對象的值,該值是一個JSON數(shù)組
       for(int i = ; i < personArray.length(); i++) {
         JSONObject personObject = personArray.getJSONObject(i); //獲得JSON數(shù)組中的每一個JSONObject對象
         Person person = new Person();
         int id = personObject.getInt("id");           //獲得每一個JSONObject對象中的鍵所對應的值
         String name = personObject.getString("name");
         int age = personObject.getInt("age");
         person.setId(id);    //將解析出來的屬性值存入Person對象
         person.setName(name);
         person.setAge(age);
         list.add(person);    //將解析出來的每一個Person對象添加到List中
       }
     } catch (JSONException e) {
       e.printStackTrace();
     }
     return list;
   } 

  在本實例中,點擊Button按鈕向服務器發(fā)送獲取JSON數(shù)據(jù)的請求,從服務器獲得JSON數(shù)據(jù)后,可以使用以上的代碼完成對JSON數(shù)據(jù)的解析,最后將解析得到的Person對象依次顯示在TextView控件中。程序運行的結果如圖5所示。

圖5 運行結果

以上內容是小編給大家分享的Android隨手筆記44之JSON數(shù)據(jù)解析的全部敘述,希望大家喜歡。

相關文章

  • android微信支付源碼分享

    android微信支付源碼分享

    這篇文章主要為大家詳細介紹了android微信支付源碼,具有一定的實用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 如何更改Dialog的標題與按鈕顏色詳解

    如何更改Dialog的標題與按鈕顏色詳解

    這篇文章主要給大家介紹了關于如何更改Dialog的標題與按鈕顏色的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面跟著小編來一起學習學習吧。
    2017-08-08
  • Android編程判斷是否連接網(wǎng)絡的方法【W(wǎng)iFi及3G判斷】

    Android編程判斷是否連接網(wǎng)絡的方法【W(wǎng)iFi及3G判斷】

    這篇文章主要介紹了Android編程判斷是否連接網(wǎng)絡的方法,結合實例形式分析了Android針對WiFi及3G網(wǎng)絡連接的判斷方法,需要的朋友可以參考下
    2017-02-02
  • Android OKHttp使用簡介

    Android OKHttp使用簡介

    目前Android端調用網(wǎng)絡請求最常用的框架就是OKHttp,目前項目中也經(jīng)常會用到。介紹下OKHttp的使用場景
    2021-05-05
  • android實現(xiàn)年齡段選擇器

    android實現(xiàn)年齡段選擇器

    這篇文章主要為大家詳細介紹了android實現(xiàn)年齡段選擇器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 詳解關于AndroidQ獲取不到imsi解決方案

    詳解關于AndroidQ獲取不到imsi解決方案

    這篇文章主要介紹了詳解關于AndroidQ獲取不到imsi解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Android編程中@id和@+id的區(qū)別分析

    Android編程中@id和@+id的區(qū)別分析

    這篇文章主要介紹了Android編程中@id和@+id的區(qū)別,較為詳細的分析講述了Android中資源引入的原理及使用@id和@+id引入資源的具體用法,總結了二者的區(qū)別,需要的朋友可以參考下
    2016-01-01
  • Android自定義View實現(xiàn)跟隨手指移動

    Android自定義View實現(xiàn)跟隨手指移動

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)跟隨手指移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android 坐標系與視圖坐標系圖解分析

    Android 坐標系與視圖坐標系圖解分析

    下面小編就為大家?guī)硪黄狝ndroid 坐標系與視圖坐標系圖解分析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 發(fā)布?Android?library?到?Maven?解析

    發(fā)布?Android?library?到?Maven?解析

    這篇文章主要介紹了發(fā)布?Android?library到Maven解析,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

贵定县| 沁阳市| 于田县| 原平市| 德兴市| 阆中市| 怀集县| 工布江达县| 延长县| 武宣县| 大丰市| 绵阳市| 彭水| 连城县| 江津市| 阿克| 定西市| 华池县| 静宁县| 巴南区| 望谟县| 蒙山县| 新干县| 廉江市| 漳州市| 张家口市| 安泽县| 自治县| 禄劝| 衡东县| 武陟县| 沅江市| 丁青县| 江山市| 精河县| 稷山县| 崇义县| 墨玉县| 河津市| 卓资县| 苏州市|