国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android隨手筆記44之JSON數據解析

2020-04-11 11:08:49
字體:
來源:轉載
供稿:網友

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

  本文將主要介紹在Android開發中,如何在服務器端創建JSON數據,以及如何在Android客戶端對JSON數據進行解析。

1.JSON數據結構

  在JSON中有兩種數據結構:對象和數組。

1.1對象

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


圖1 JSON對象結構示意圖

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

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

1.2數組

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

 

圖2 JSON數組結構示意圖

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

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

1.3值的類型

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


圖3 JSON中值的類型

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

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

2.在服務器端生成JSON數據

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

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

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

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

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

  如下的代碼創建了一個JsonTools類,并實現了靜態方法createJsonString(),用來生成JSON數據。

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

  通過使用該方法,我們可以很方便的將各種數據傳遞進來,并將其轉化成JSON數據。比如,我們可以在JsonService類中,實現一個簡單的獲取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)三個屬性。

  最后,我們可以創建一個繼承自HttpServlet的JsonAction類,并實現其中的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參數     if(action_flag.equals("persons")) {       str = JsonTools.createJsonString("persons", listPerson);     }     out.println(str);     out.flush();     out.close();   }

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

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

 

圖4 生成的JSON數據

3.在客戶端解析JSON數據

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

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

  觀察圖4所示的JSON數據可以看出:

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

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

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

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

代碼如下所示:

  /*    * Function :  解析JSON數據,還原成Person對象列表    * Param   :  key      Json數據的鍵值    *        jsonString   從服務器獲得的Json數據    * Retuen  :  Person對象列表    * Author  :  博客園-依舊淡然    */   public static List<Person> getListPerson(String key, String jsonString) {     List<Person> list = new ArrayList<Person>();     try {       JSONObject jsonObject = new JSONObject(jsonString);     //創建JSONObject對象       JSONArray personArray = jsonObject.getJSONArray(key);    //獲取JSONObject對象的值,該值是一個JSON數組       for(int i = ; i < personArray.length(); i++) {         JSONObject personObject = personArray.getJSONObject(i); //獲得JSON數組中的每一個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按鈕向服務器發送獲取JSON數據的請求,從服務器獲得JSON數據后,可以使用以上的代碼完成對JSON數據的解析,最后將解析得到的Person對象依次顯示在TextView控件中。程序運行的結果如圖5所示。

圖5 運行結果

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆德县| 汝城县| 仁怀市| 温州市| 绥江县| 古蔺县| 资阳市| 云梦县| 东阿县| 车险| 巩义市| 祁连县| 西昌市| 武功县| 万安县| 得荣县| 桦南县| 冀州市| 永济市| 鸡泽县| 乌什县| 福贡县| 大悟县| 鸡泽县| 汶上县| 同心县| 凤山市| 运城市| 晋州市| 大安市| 旌德县| 罗山县| 东兰县| 柳江县| 咸丰县| 深泽县| 苏州市| 泸溪县| 阿克苏市| 闽侯县| 丰城市|