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

首頁 > 系統 > Android > 正文

Android學習筆記45之gson解析json

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

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

JSON對象:

JSON中對象(Object)以"{"開始, 以"}"結束. 對象中的每一個item都是一個key-value對, 表現為"key:value"的形式, key-value對之間使用逗號分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON對象的key只能是string類型的, 而value可以是string, number, false, true, null, Object對象甚至是array數組, 也就是說可以存在嵌套的情況.

JSON數組:

JSON數組(array)以"["開始, 以"]"結束, 數組中的每一個元素可以是string, number, false, true, null, Object對象甚至是array數組, 數組間的元素使用逗號分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].

  在上一篇博文《Android學習筆記44:JSON數據解析》中,我們使用基本的JSON API完成了在服務器端創建JSON數據,以及在Android客戶端對JSON數據進行解析。 

  其實,要創建和解析JSON數據,也可以使用GSON來完成。GSON是Google提供的用來在Java對象和JSON數據之間進行映射的Java類庫。使用GSON,可以很容易的將一串JSON數據轉換為一個Java對象,或是將一個Java對象轉換為相應的JSON數據。 

1.GSON的兩個重要方法

  在GSON的API中,提供了兩個重要的方法:toJson()和fromJson()方法。其中,toJson()方法用來實現將Java對象轉換為相應的JSON數據,fromJson()方法則用來實現將JSON數據轉換為相應的Java對象。

1.1 toJson()方法

  toJson()方法用于將Java對象轉換為相應的JSON數據,主要有以下幾種形式:

 ?。?)String toJson(JsonElement jsonElement);

  (2)String toJson(Object src);

 ?。?)String toJson(Object src, Type typeOfSrc);

  其中,方法(1)用于將JsonElement對象(可以是JsonObject、JsonArray等)轉換成JSON數據;方法(2)用于將指定的Object對象序列化成相應的JSON數據;方法(3)用于將指定的Object對象(可以包括泛型類型)序列化成相應的JSON數據。

1.2 fromJson()方法

  fromJson()方法用于將JSON數據轉換為相應的Java對象,主要有以下幾種形式:

 ?。?)<T> T fromJson(JsonElement json, Class<T> classOfT);

  (2)<T> T fromJson(JsonElement json, Type typeOfT);

 ?。?)<T> T fromJson(JsonReader reader, Type typeOfT);

  (4)<T> T fromJson(Reader reader, Class<T> classOfT);

 ?。?)<T> T fromJson(Reader reader, Type typeOfT);

  (6)<T> T fromJson(String json, Class<T> classOfT);

 ?。?)<T> T fromJson(String json, Type typeOfT);

  以上的方法用于將不同形式的JSON數據解析成Java對象。

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

  要使用GSON技術在服務器端生成JSON數據,首先需要完成以下兩個準備工作。

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

 ?。?)往該工程中導入GSON的API數據包gson-2.2.1.jar。 

  然后,我們便可以在該工程中創建一個JsonTools工具類,并實現靜態方法createJsonString(),在該方法中通過使用GSON技術來生成JSON數據。該方法的具體實現如下。 

public class JsonTools {    /*     * Function : 生成JSON字符串     * Param   :  value  想要轉換成JSON字符串的Object對象     * Retuen  : JSON字符串     * Author  : 博客園-依舊淡然     */    public static String createJsonString(Object value) {     Gson gson = new Gson();     String string = gson.toJson(value);     return string;    }     }

  可以看到,這個方法的具體實現非常簡單,首先創建一個Gson對象,然后通過調用Gson對象的toJson()方法,將傳進來的value(任意的Java對象)轉換成JSON字符串即可。

  通過使用該方法,我們可以很方便的將任意Java對象傳遞進來,并將其轉化成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;  } 

  在該方法中,我們向List列表中加入了3個Person對象,每個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");   if(action_flag.equals("persons") {    str = JsonTools.createJsonString(listPerson);   }   out.println(str);   out.flush();   out.close();  }

  在該方法中,我們通過調用JsonService類中的getListPerson()方法獲得了Person對象列表listPerson,并將其傳入JsonTools.createJsonString()方法中,生成了Person對象列表的JSON數據。將該工程發布到Tomcat上,使用瀏覽器訪問該Web工程,可以看到如圖1所示的界面,Person對象列表被成功的轉化成了JSON數據。


圖1 生成的JSON數據

 3.在客戶端解析JSON數據

  在Android工程中,我們可以通過HttpURLConnection接口訪問圖1所示的URL來獲得服務器上的JSON數據。

  得到JSON數據之后,便可以通過使用前面提到的fromJson()方法,將圖1 所示的JSON數據還原成對應的Person對象列表了。當然了,因為這里使用到了GSON,同樣需要向Android工程中導入gson-2.2.1.jar包。具體的實現方法如下。

 /*  * Function : 解析JSON數據,還原成Person對象列表  * Param  : jsonString   從服務器獲得的Json數據  * Retuen  : Person對象列表  * Author : 博客園-依舊淡然  */  public static List<Person> getListPerson(String jsonString) {   List<Person> list = new ArrayList<Person>();   Gson gson = new Gson();   list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());   return list;  }

  可以看到,使用GSON解析JSON數據的代碼實現也非常簡單。其中,TypeToken是GSON提供的數據類型轉換器,支持多種數據集合類型轉換,其反射機制可以實現將解析出來的Java對象映射到對應的數據集合中。

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

 

圖2 運行結果

以上內容是小編給大家分享的Android學習筆記45之gson解析json的全部敘述,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人在线观看| 在线日韩欧美视频| 欧美做爰性生交视频| 成人免费福利在线| 亚洲激情在线观看| 91av视频导航| 国产精品高潮呻吟久久av野狼| 国产成人精品在线播放| 日韩在线视频网| 中文字幕亚洲一区在线观看| 国内精品久久久久| 亚洲欧美一区二区激情| 国产精品欧美日韩一区二区| 欧美极品在线视频| 日韩欧美a级成人黄色| 国产精品丝袜视频| 国产精品高潮呻吟久久av黑人| 91亚洲精品在线观看| 亚洲国产成人久久综合| 亚洲大尺度美女在线| 国产午夜精品理论片a级探花| 97在线视频精品| 日本一区二区不卡| 日日骚av一区| 91精品久久久久久久久久入口| 日韩欧美国产骚| 成人xvideos免费视频| 国产成人免费91av在线| 亚洲国产日韩欧美在线图片| 亚洲va久久久噜噜噜| 久久国产精品久久久| 不卡av电影院| 亚洲电影免费观看高清完整版在线观看| 久久久国产成人精品| 欧美激情区在线播放| 日韩av网站在线| 久久久久久欧美| 亚洲自拍偷拍一区| 国产丝袜一区二区三区| 亚洲国产精品美女| 亚洲国产精品va| 精品呦交小u女在线| 日韩高清人体午夜| 日本中文字幕不卡免费| 91精品国产高清自在线| 97色在线观看免费视频| www.日本久久久久com.| 日韩激情第一页| 国产精品一区二区三区毛片淫片| 欧美日韩国产丝袜美女| 国产亚洲视频在线观看| 国产精品精品一区二区三区午夜版| 亚洲人a成www在线影院| 午夜免费在线观看精品视频| 日本久久久久久久久| 欧美性69xxxx肥| 亚洲欧美激情四射在线日| 亚洲精品欧美一区二区三区| 亚洲人a成www在线影院| 欧美高清视频一区二区| 91国语精品自产拍在线观看性色| 97在线视频免费看| 另类美女黄大片| 日韩欧美在线播放| 九九精品视频在线观看| 欧洲亚洲免费视频| 日韩a**站在线观看| 精品欧美激情精品一区| 亚洲欧美国产日韩中文字幕| 俺去亚洲欧洲欧美日韩| 成人春色激情网| 91麻豆桃色免费看| 成人a级免费视频| 欧美专区国产专区| 中文字幕精品av| 国产中文字幕91| 日本老师69xxx| 国产精品69精品一区二区三区| 国产狼人综合免费视频| 久久久噜久噜久久综合| 久久久噜噜噜久噜久久| 欧美中文字幕视频在线观看| 日韩电影中文字幕av| 高清欧美一区二区三区| 日韩亚洲精品电影| 91精品国产91久久久久福利| 狠狠久久五月精品中文字幕| 91精品久久久久久综合乱菊| 55夜色66夜色国产精品视频| 中文字幕日韩欧美在线| 揄拍成人国产精品视频| 日韩av电影手机在线| 九九热最新视频//这里只有精品| 成人网页在线免费观看| 伊人久久大香线蕉av一区二区| 狠狠躁夜夜躁久久躁别揉| 亚洲精品久久久一区二区三区| 97人人做人人爱| 国产精品日韩久久久久| 一区二区三区动漫| 97视频在线观看免费| 欧美在线一区二区三区四| 欧美性xxxxxxxxx| 不卡在线观看电视剧完整版| 亚洲国产日韩一区| 国产福利视频一区二区| 国产精品美女免费看| 亚洲性日韩精品一区二区| 久久久久九九九九| 日韩av资源在线播放| 国产成人精品一区二区三区| 欧美亚洲另类制服自拍| 欧美丝袜美女中出在线| 欧美成人午夜剧场免费观看| 日韩黄在线观看| 91国产视频在线播放| 88国产精品欧美一区二区三区| 国产精品777| 亚洲精品视频在线观看视频| 福利视频一区二区| 国产成人精品免费久久久久| 亚洲美女又黄又爽在线观看| 欧美性精品220| 国产精品激情自拍| 欧美成人免费全部观看天天性色| 亚洲国产天堂久久综合| 欧美国产日韩中文字幕在线| 中文字幕亚洲色图| 国产精品黄页免费高清在线观看| 日韩电视剧在线观看免费网站| 国产成人精品视频| 成人网中文字幕| 国内精品久久久久久影视8| 中文字幕欧美日韩在线| 色婷婷av一区二区三区久久| 影音先锋日韩有码| 欧美大胆在线视频| 亚洲欧美一区二区三区在线| 国外色69视频在线观看| 欧美大奶子在线| 亚洲国产高潮在线观看| 国产精品自拍偷拍| 日韩性生活视频| 亚洲永久在线观看| 91视频免费在线| 欧美亚洲午夜视频在线观看| 色偷偷噜噜噜亚洲男人的天堂| 亚洲天堂开心观看| 久久久久久久久国产精品| 久久久www成人免费精品张筱雨| 91精品久久久久久久久久另类| 国产精品久久电影观看| 亚洲电影av在线| 黄色一区二区三区| 日韩av毛片网| 欧美一性一乱一交一视频| 国产69久久精品成人看| 亚洲欧美中文字幕在线一区| 亚洲成人av资源网| 日韩视频免费中文字幕| 色悠悠久久88| 欧美另类极品videosbest最新版本| 日韩av一区在线观看| 国产成人综合av|