json數據的解析相對而言,仍是比較容易的,實現的代碼也十分簡單。這裏用的是jsonReade方法來進行json數據解析。java
1.在解析以前,你們須要知道什麼是json數據。android
json數據存儲的對象是無序的「名稱/值」對的集合。和其餘的數據存儲方式相比,json數據的可讀性,可擴展性,編碼難度,解碼難度都有必定的優點。在json數據中,json
對於一個對象:數組
(1)一個對象以「{」(左括號)開始,「}」(右括號)結束。安全
(2)每一個「名稱」後跟一個「:」(冒號);測試
(3)「‘名稱/值’ 對」之間使用「,」(逗號)分隔。編碼
對於一個數組:spa
(1)一個數組以「[」(左中括號)開始,「]」(右中括號)結束。code
(2)值之間使用「,」(逗號)分隔。對象
下面是android官方給出的一組json數據示例:
[ { "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 use android.util.JsonReader!", "geo": [50.454722, -104.606667], "user": { "name": "jesse", "followers_count": 2 } } ]
在代碼中,若是直接定義json數據,須要在代碼中對 「 使用 \ 轉義。上面json在代碼中的形式爲:(在java代碼中,建立一段json數據,「 符號須要轉義)
private String jsonDate = "[" + "{\"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 use android.util.JsonReader!\"," + "\"geo\":[50.454722,-104.606667]," + "\"user\":{\"name\":\"jesse\",\"followers_count\":2}}" + "]";
1. 使用JsonReader方法解析Json數據對象,你須要建立一個JsonReader對象.
2.而後使用beginArray()來開始解析 [ 左邊的第一個數組。
3.再使用beginObject()來開始解析數組{中的第一個對象。
4.對於直接的數據能夠直接獲得解析到的數據,但對於在json中嵌套了數組的數據,須要在寫一個解析方法。
5.在解析完成後,別忘用endArray(),endObject()來關閉解析。
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{ //建立JsonReader對象 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 { //跳過當前值 jsReader.skipValue(); System.out.println("skip======>"); } } jsReader.endObject(); } //解析geo中的數據 public void readDoubleArray(JsonReader jsReader) throws IOException{ jsReader.beginArray(); while(jsReader.hasNext()){ System.out.println(jsReader.nextDouble()); } jsReader.endArray(); } //因爲讀取user中的數據 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(); } }
對上面的內容解析的輸出:
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
以上!另外對APP進行在線全方位的安全性、兼容性測試,我都會用這個:www.ineice.com。