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

首頁 > 編程 > Java > 正文

探究Android系統中解析JSON數據的方式

2019-11-26 15:02:04
字體:
來源:轉載
供稿:網友

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


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

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

2015731153703523.png (690×150)

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

2015731153726475.png (691×325)

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

2015731153747720.png (686×156)

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

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

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

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

有兩種不同的取值方式:

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


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

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

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


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

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

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


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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频自拍偷拍| 中文字幕一区日韩电影| 久久免费成人精品视频| 日韩视频中文字幕| 欧美精品福利视频| 亚洲自拍中文字幕| 富二代精品短视频| 欧美精品在线免费播放| 精品视频中文字幕| 亚洲激情在线观看视频免费| 国产精品三级在线| 国产69精品99久久久久久宅男| 日韩精品免费综合视频在线播放| 55夜色66夜色国产精品视频| 亚洲欧美激情另类校园| 黑人巨大精品欧美一区二区免费| 亚洲第一视频在线观看| 亚洲国产高清高潮精品美女| 性欧美暴力猛交69hd| 永久免费毛片在线播放不卡| 亚洲毛片在线看| 欧美人在线观看| 亚洲国产成人精品一区二区| 欧美理论在线观看| 欧美电影免费观看电视剧大全| 欧美极品少妇xxxxx| 成人免费在线网址| 久久综合亚洲社区| 精品久久久在线观看| 日韩欧美中文第一页| 国自在线精品视频| 久久久亚洲天堂| 亚洲大胆人体视频| 欧美精品中文字幕一区| 亚洲视频国产视频| 中日韩美女免费视频网站在线观看| 欧美老女人bb| 日韩在线观看网址| 九九视频直播综合网| 亚洲精品av在线播放| 久久免费视频这里只有精品| 欧美成年人网站| 欧美国产日韩中文字幕在线| 欧美日韩一区二区免费在线观看| 久久99热精品这里久久精品| 欧美激情videoshd| 久久精品免费播放| 欧美伦理91i| 国产精品扒开腿做爽爽爽男男| 亚洲欧美激情一区| 久久午夜a级毛片| 久久人人爽人人爽人人片亚洲| 成人性生交大片免费看视频直播| 国产日韩专区在线| 亚洲变态欧美另类捆绑| 日韩天堂在线视频| 亚洲白虎美女被爆操| 91伊人影院在线播放| 日本成熟性欧美| 欧美一级片在线播放| 亚洲午夜性刺激影院| 精品呦交小u女在线| 最近2019中文字幕第三页视频| 亚洲美女av在线播放| 91精品国产91久久久久久不卡| 色综合伊人色综合网| 成人乱色短篇合集| 成人444kkkk在线观看| 欧美视频免费在线观看| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美日韩精品久久亚洲区| 亚洲精品小视频| 欧美成人午夜视频| 97国产suv精品一区二区62| 亚洲天堂2020| 国产精品激情av电影在线观看| 日韩久久精品成人| 欧美日韩精品中文字幕| 欧美一区二区三区图| 奇门遁甲1982国语版免费观看高清| 中文字幕欧美日韩| 欧美国产高跟鞋裸体秀xxxhd| 国产欧美精品va在线观看| 国产一区私人高清影院| 日韩资源在线观看| 91禁外国网站| 日本乱人伦a精品| 欧美xxxx18国产| 国产亚洲美女精品久久久| 久热99视频在线观看| 日韩在线观看免费全集电视剧网站| 久久成人综合视频| 精品小视频在线| 亚洲老板91色精品久久| 亚洲大胆人体视频| 性色av一区二区三区红粉影视| 亚洲free性xxxx护士白浆| 欧美日韩国产一区在线| 日韩精品高清在线| 日本精品va在线观看| 深夜福利91大全| 国产裸体写真av一区二区| 好吊成人免视频| 国产精品高清网站| 久久综合久久美利坚合众国| 操日韩av在线电影| 亚洲男人天堂古典| 欧美激情免费观看| 亚洲人av在线影院| 欧美日韩亚洲精品内裤| 日韩视频在线一区| 久热精品在线视频| 中文字幕成人在线| 精品成人乱色一区二区| 欧美激情2020午夜免费观看| 亚洲国产精品人人爽夜夜爽| 久久精品夜夜夜夜夜久久| 国产精品丝袜久久久久久高清| 韩国视频理论视频久久| 国产精品一区电影| 亚洲三级免费看| 欧美国产精品va在线观看| 国自在线精品视频| 91精品啪aⅴ在线观看国产| 中文字幕精品视频| 欧美成人国产va精品日本一级| 亚洲国产免费av| 91av在线免费观看| 91免费精品视频| 91成品人片a无限观看| 欧美另类精品xxxx孕妇| 国产在线观看精品| 久久久久久久亚洲精品| 欧美日韩一区二区免费在线观看| 亚洲欧美国产精品| 伊人久久免费视频| 日韩欧美中文字幕在线观看| 欧美性猛交xxxxx水多| 国产精品欧美激情在线播放| 日韩中文字幕免费视频| 国产精品久久久久久久久久新婚| 亚州国产精品久久久| 91在线免费看网站| 91久久精品在线| 国产日韩欧美一二三区| 亚洲日本欧美日韩高观看| 性色av一区二区三区在线观看| 欧美精品福利视频| 亚洲午夜国产成人av电影男同| 一区二区国产精品视频| 主播福利视频一区| 少妇精69xxtheporn| 91精品中国老女人| 精品国产福利在线| 亚洲欧洲在线播放| 日韩在线观看免费高清完整版| 欧美精品久久久久久久免费观看| 欧美精品免费在线观看| 国产91在线播放九色快色| 91av在线看| 国产精品伦子伦免费视频| 亚洲a∨日韩av高清在线观看| 欧美电影免费观看高清完整| 欧美日韩国产一中文字不卡|