Android 之 json資料的解析(jsonReader)

來源:互聯網
上載者:User

標籤:android


json資料的解析相對而言,還是比較容易的,實現的代碼也十分簡單。這裡用的是jsonReade方法來進行json資料解析。

 

1.在解析之前,大家需要知道什麼是json資料。

 

json資料存放區的對象是無序的“名稱/值”對的集合。和其他的資料存放區方式相比,json資料的可讀性,可擴充性,編碼難度,解碼難度都有一定的優勢。在json資料中,

 

對於一個對象:

(1)一個對象以“{”(左括弧)開始,“}”(右括弧)結束。

(2)每個“名稱”後跟一個“:”(冒號);

(3)“‘名稱/值’對”之間使用“,”(逗號)分隔。

 

對於一個數組:

 

(1)一個數組以“[”(左中括弧)開始,“]”(右中括弧)結束。

(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 useandroid.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 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資料對象,你需要建立一個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:91234567890111-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_newb11-22 06:59:52.471: I/System.out(5329):followers_count:4111-22 06:59:52.481: I/System.out(5329):name:91234567890211-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.45472211-22 06:59:52.500: I/System.out(5329):-104.60666711-22 06:59:52.510: I/System.out(5329):user_name:jesse11-22 06:59:52.510: I/System.out(5329):followers_count:2

 

以上!另外對APP進行線上全方位的安全性、相容性測試,我都會用這個:www.ineice.com。


Android 之 json資料的解析(jsonReader)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.