激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

2019-12-31 14:48zinss26914 JAVA教程

這篇文章主要介紹了探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式,文中講到了使用Java代碼實現(xiàn)的處理JSON的一些主要方法,需要的朋友可以參考下

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


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

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

探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

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

探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

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

探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式

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

JSONObject
這是系統(tǒng)中有關(guān)JSON定義的基本單元,其包含一對(key/value)數(shù)值

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

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

有兩種不同的取值方式:

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


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

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

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


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

獲取json字符串
這個網(wǎng)址提供了json字符串:http://api.androidhive.info/contacts/, 我們可以開啟一個線程發(fā)起http請求,獲取json字符串,參考代碼如下:

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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) 創(chuàng)建JSONObject:

?
1
2
// Create a JSONObject
JSONObject jsonObject = new JSONObject(result);


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

?
1
2
3
4
5
6
7
// 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

?
1
2
3
4
5
6
7
8
9
10
11
// 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)獲取特定字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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);
}


解析結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美高清另类自拍视频在线看 | 日本a大片| 超碰人人射 | 中文区中文字幕免费看 | 亚洲综合精品 | 毛片视频在线免费观看 | japanese末成年free | 黄色片网站在线免费观看 | 一级毛片电影网 | 国产精品视频一区二区三区四 | 91短视频在线播放 | 特级黄色小说 | 久久久精品视频免费看 | 高清视频91 | 91精品国产92久久久久 | 久久久久久麻豆 | 成人免费网站在线观看视频 | 久久国产精品一区 | 色中色在线视频 | 国内久久久久 | 国产va在线观看 | 91在线色| 久久亚洲精品久久国产一区二区 | 国产精品视频一区二区三区综合 | 黄色毛片视频在线观看 | 女人久久久www免费人成看片 | 97中文| av国产在线被下药迷网站 | 欧美成人精品欧美一级 | 制服丝袜日日夜夜 | 日本在线视频免费观看 | av不卡毛片 | 亚洲精品动漫在线观看 | 桥本有菜免费av一区二区三区 | 久久日韩 | 久久久久国产成人免费精品免费 | 久久精品欧美一区二区 | 黄色网址进入 | 国产亚洲小视频 | 91成人在线免费视频 | 色综合视频 |