Android 之 json數據的解析(jsonReader)

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

相關文章
相關標籤/搜索