亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > 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數據呢?首先需要完成以下兩個準備工作。

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

 ?。?)我們還需要在該工程中導入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數據可以看出:

 ?。?)該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數據解析的全部敘述,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色午夜这里只有精品| 欧美日韩国产一区二区三区| www.日韩.com| 午夜剧场成人观在线视频免费观看| 欧美国产在线视频| 欧美猛交ⅹxxx乱大交视频| 日韩成人在线视频| 亚洲人成电影网站色| 亚洲欧洲第一视频| 亚洲香蕉成视频在线观看| 日韩av手机在线看| 欧美成年人视频网站| 中文字幕精品一区二区精品| 日韩有码视频在线| 伊人男人综合视频网| 久久精品国产久精国产思思| 原创国产精品91| 国内精品一区二区三区四区| 欧美在线观看一区二区三区| 亚洲最大成人免费视频| 久久久精品免费视频| 国产一区红桃视频| 亚洲精品videossex少妇| 日本中文字幕不卡免费| 成人精品一区二区三区电影免费| www.日韩不卡电影av| 久久天天躁狠狠躁老女人| 国产日产欧美精品| 精品国产欧美一区二区三区成人| 国产精品自产拍高潮在线观看| 欧美成年人网站| 亚洲美女在线观看| 欧美大片在线影院| 国产一区二区三区在线| 原创国产精品91| 欧美日韩国产在线看| 一区国产精品视频| 欧美激情欧美激情| 国产精品视频色| 亚洲美女av网站| www.日韩.com| 亚洲欧美在线看| 欧美午夜影院在线视频| 日韩中文字幕网址| 欧美中在线观看| 久久av在线看| 国产精品视频一区国模私拍| 成人黄色激情网| 久久久av免费| 久久久久免费精品国产| 成人深夜直播免费观看| 日韩精品免费在线视频| 91在线免费观看网站| 57pao国产成人免费| 97国产精品久久| 欧美激情影音先锋| 久久久国产91| 国产精品久久久久高潮| 亚洲欧洲免费视频| 欧美精品videossex性护士| 国产精品久久久久久久久久久不卡| 91国内揄拍国内精品对白| 亚洲香蕉成视频在线观看| 亚洲尤物视频网| 亚洲乱码av中文一区二区| 亚洲美女又黄又爽在线观看| 精品国产31久久久久久| 亚洲品质视频自拍网| 久久精品中文字幕| 日本不卡视频在线播放| 日韩精品在线免费观看视频| 欧美黑人性视频| 高清欧美电影在线| 久久av红桃一区二区小说| 国产精品久久久亚洲| 欧美孕妇与黑人孕交| 亚洲欧美中文日韩在线v日本| 欧美性高跟鞋xxxxhd| 97视频在线观看亚洲| 欧美精品videofree1080p| 精品亚洲aⅴ在线观看| 日韩精品中文字幕视频在线| 亚洲美女av在线| 亚洲精品自拍视频| 欧美大胆在线视频| 日韩精品极品在线观看| 91在线免费观看网站| www.久久久久久.com| 亚洲欧美国产日韩中文字幕| 国产精品羞羞答答| 亚洲国产精品高清久久久| 91精品久久久久久久久久久久久久| 久久男人资源视频| 亚洲激情视频网站| 亚洲天堂第二页| 中文字幕日韩电影| 成人欧美一区二区三区在线湿哒哒| 欧美国产日韩精品| 2019中文字幕在线免费观看| 国语自产精品视频在线看一大j8| 国产精品久久久久久久久久三级| 中文字幕欧美亚洲| 日韩精品在线电影| 亚洲日本成人女熟在线观看| 日韩精品一区二区三区第95| 国产精品免费网站| 亚洲精品电影在线观看| 欧洲亚洲女同hd| 日韩高清电影免费观看完整版| 国产91ⅴ在线精品免费观看| 国产精品中文字幕在线| 欧美日韩国产精品一区二区三区四区| 欧美久久精品午夜青青大伊人| 高清欧美性猛交xxxx| 亚洲一区二区在线| 久久伊人精品天天| 92看片淫黄大片看国产片| 这里只有精品在线播放| 国产一级揄自揄精品视频| 国产丝袜视频一区| 国内精品伊人久久| 国产精品免费视频久久久| 欧美日韩在线视频首页| 欧美日韩国产一区二区三区| 日韩美女视频在线观看| 亚洲免费影视第一页| 日韩小视频在线观看| 国产亚洲精品久久久久久| 中文字幕免费精品一区高清| 久久福利视频导航| 中文字幕日韩精品有码视频| 亚洲石原莉奈一区二区在线观看| 欧洲美女7788成人免费视频| 成人午夜在线视频一区| 在线日韩欧美视频| 精品国产老师黑色丝袜高跟鞋| 国产精品久久久久久久久久久久久久| 中文字幕亚洲综合| 欧美人与物videos| 国产精品高潮呻吟久久av无限| 欧美特黄级在线| 欧美高清激情视频| 麻豆精品精华液| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲欧美综合精品久久成人| 97精品国产aⅴ7777| 疯狂做受xxxx高潮欧美日本| 国产精品96久久久久久又黄又硬| 欧美激情女人20p| 国产精品亚洲综合天堂夜夜| 日韩电影在线观看永久视频免费网站| 国产精品三级久久久久久电影| 久久视频免费在线播放| 欧美成人合集magnet| 国产精品亚洲美女av网站| 91精品国产91久久久久久久久| 大胆欧美人体视频| 欧美综合在线观看| 九九视频这里只有精品| 操91在线视频| 色777狠狠综合秋免鲁丝| 亚洲视频在线观看免费| 中文字幕精品网| 国产区精品视频|