您好,登錄后才能下訂單哦!
json數(shù)據(jù)的解析相對(duì)而言,還是比較容易的,實(shí)現(xiàn)的代碼也十分簡(jiǎn)單。這里用的是jsonReade方法來進(jìn)行json數(shù)據(jù)解析。
1.在解析之前,大家需要知道什么是json數(shù)據(jù)。
json數(shù)據(jù)存儲(chǔ)的對(duì)象是無序的“名稱/值”對(duì)的集合。和其他的數(shù)據(jù)存儲(chǔ)方式相比,json數(shù)據(jù)的可讀性,可擴(kuò)展性,編碼難度,解碼難度都有一定的優(yōu)勢(shì)。在json數(shù)據(jù)中,
對(duì)于一個(gè)對(duì)象:
(1)一個(gè)對(duì)象以“{”(左括號(hào))開始,“}”(右括號(hào))結(jié)束。
(2)每個(gè)“名稱”后跟一個(gè)“:”(冒號(hào));
(3)“‘名稱/值’對(duì)”之間使用“,”(逗號(hào))分隔。
對(duì)于一個(gè)數(shù)組:
(1)一個(gè)數(shù)組以“[”(左中括號(hào))開始,“]”(右中括號(hào))結(jié)束。
(2)值之間使用“,”(逗號(hào))分隔。
下面是android官方給出的一組json數(shù)據(jù)示例:
[ { "id": 912345678901, "text": "How do I read JSON on Android?", "geo": null, "user": { "name": "android_newb", "followers_count": 41 } }, { "id": 912345678902, "text": "@android_newb just useandroid.util.JsonReader!", "geo": [50.454722, -104.606667], "user": { "name": "jesse", "followers_count": 2 } } ]
在代碼中,如果直接定義json數(shù)據(jù),需要在代碼中對(duì)“ 使用 \ 轉(zhuǎn)義。上面json在代碼中的形式為:(在java代碼中,創(chuàng)建一段json數(shù)據(jù),“ 符號(hào)需要轉(zhuǎn)義)
private String jsonDate = "[" + "{\"id\": 912345678901," + "\"text\":\"How do I read JSON onAndroid?\"," + "\"geo\":null," +"\"user\":{\"name\":\"android_newb\",\"followers_count\":41}}," + "{\"id\": 912345678902," + "\"text\":\"@android_newb just useandroid.util.JsonReader!\"," + "\"geo\":[50.454722,-104.606667]," +"\"user\":{\"name\":\"jesse\",\"followers_count\":2}}" + "]";
1. 使用JsonReader方法解析Json數(shù)據(jù)對(duì)象,你需要?jiǎng)?chuàng)建一個(gè)JsonReader對(duì)象.
2.然后使用beginArray()來開始解析 [ 左邊的第一個(gè)數(shù)組。
3.再使用beginObject()來開始解析數(shù)組{中的第一個(gè)對(duì)象。
4.對(duì)于直接的數(shù)據(jù)可以直接得到解析到的數(shù)據(jù),但對(duì)于在json中嵌套了數(shù)組的數(shù)據(jù),需要在寫一個(gè)解析方法。
5.在解析完成后,別忘用endArray(),endObject()來關(guān)閉解析。
package com.mecury.jsontest; import java.io.IOException; import java.io.StringReader; import android.util.JsonReader; import android.util.JsonToken; public class JsonUtils { public void parseJson(String jsonDate) throws IOException{ //創(chuàng)建JsonReader對(duì)象 JsonReader jsReader = new JsonReader(new StringReader(jsonDate)); jsReader.beginArray(); while (jsReader.hasNext()) { readMessage(jsReader); } jsReader.endArray(); } public void readMessage(JsonReader jsReader) throws IOException{ jsReader.beginObject(); while(jsReader.hasNext()){ String tagName =jsReader.nextName(); if(tagName.equals("id")) { System.out.println("name:"+jsReader.nextLong()); }else if(tagName.equals("text")) { System.out.println("text:"+jsReader.nextString()); }else if(tagName.equals("geo") && jsReader.peek()!=JsonToken.NULL) { readDoubleArray(jsReader); }else if(tagName.equals("user")) { readUser(jsReader); }else { //跳過當(dāng)前值 jsReader.skipValue(); System.out.println("skip======>"); } } jsReader.endObject(); } //解析geo中的數(shù)據(jù) public void readDoubleArray(JsonReader jsReader) throws IOException{ jsReader.beginArray(); while(jsReader.hasNext()){ System.out.println(jsReader.nextDouble()); } jsReader.endArray(); } //由于讀取user中的數(shù)據(jù) public void readUser(JsonReader jsReader) throws IOException{ String userName = null; int followsCount = -1; jsReader.beginObject(); while (jsReader.hasNext()) { String tagName = jsReader.nextName(); if (tagName.equals("name")) { userName =jsReader.nextString(); System.out.println("user_name:"+ userName); }else if (tagName.equals("followers_count")) { followsCount = jsReader.nextInt(); System.out.println("followers_count:"+followsCount); } } jsReader.endObject(); } }
對(duì)上面的內(nèi)容解析的輸出:
11-22 06:59:52.441: I/System.out(5329):name:912345678901 11-22 06:59:52.441: I/System.out(5329):text:How do I read JSON on Android? 11-22 06:59:52.461: I/System.out(5329):skip======> 11-22 06:59:52.461: I/System.out(5329):user_name:android_newb 11-22 06:59:52.471: I/System.out(5329):followers_count:41 11-22 06:59:52.481: I/System.out(5329):name:912345678902 11-22 06:59:52.491: I/System.out(5329):text:@android_newb just use android.util.JsonReader! 11-22 06:59:52.500: I/System.out(5329):50.454722 11-22 06:59:52.500: I/System.out(5329):-104.606667 11-22 06:59:52.510: I/System.out(5329):user_name:jesse 11-22 06:59:52.510: I/System.out(5329):followers_count:2
以上!另外對(duì)APP進(jìn)行在線全方位的安全性、兼容性測(cè)試,我都會(huì)用這個(gè):www.ineice.com。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。