Android中使用gson解析JSON

首先,我們需要在code.google.com/p/google-gson/downloads/list下載gson-1.6.jar,然後將文件導入到你需要解析的項目中去。

gson中解析Json數據用JsonReader。

gson可以將Json數據轉化爲Java對象:

1. 先有一個Json對象String str ="{\"name\":\"Michael\",\"age\":20}"Json類可以直接把Json數據轉化爲Java對象

2. 創建User

public class User{
    privateString name;
       private int age;
       public void setName(Stringname){
         this.name= name;
       }
       public String getName(){
         returnname;
       }
       public void setAge(int age){
      this.age= age;
       }
       public int getAge(){
         return age;
       }
}

3. 創建Gson對象

Gson gson = new Gson();
//第二個是指示轉爲哪個類的對象
User user = gson.fromJson(str , User.class);
Sysout.out.println(user.getName);
Sysout.out.println(user.getAge);

也可以將Json數組轉換爲Java對象:

1. 這是Json數據,String str ="[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]"。這個Json數據有一個數組,數組裏面有兩個Json對象

2. 首先必須生成Type對象,使用以下的方式(User是上面的User)

listType= new TypeToken<LinkedList<User>>(){}.getType();

3. 生成Gson對象

Gsongson = new Gson();

4.

LinkedList<User>users = gson.fromJson(str , listType);

5. 循環迭代LinkedList

for(Iteratoriterator = users.iterator ; iterator.hasNext() ){
       User user = (User)iterator.next();
       System.out.println(user.getName());
       System.out.println(user.getAge());
}


綜合例子

 

{
       "id": 912345678901,
       "age": 33, 
       "text": "How do I streamJSON in Java?",
       "geo": null,
 }

 

紅色部分如果表示有可能爲null,則在判斷的時候需要如下name.equals("geo")&& reader.peek() != JsonToken.NULL

橙色部分要是想不解析其中的Json字段,需要在判斷的時候加上一個else語句如下:else{reader.skipValue()} 

 

例子1

Json數據,後面每一個都是如此不再做任何的解析了,然後跟着就是對應的代碼內容

 {
    "id": 912345678901,
    "text": "How do I stream JSON in Java?",
    "geo": null,
    "user": {
      "name": "json_newb",
      "followers_count": 41
     }
}
        
  reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("id")) {
                    System.out.println("id:" + reader.nextLong());
                } else if (name.equals("text")) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("user")) {
                    usernameObject();
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();

       private void usernameObject() throws IOException{
        reader.beginObject();
        while (reader.hasNext()) {
            String nxtName = reader.nextName();
            if (nxtName.equals("name")) {
                System.out.println("nxtName:" + reader.nextString());
            } else if (nxtName.equals("followers_count")) {
                System.out.println("nxtName:" + reader.nextInt());
            }
       }  

    

例子2.

[
{
    "id": 912345678901,
    "text": "How do I stream JSON in Java?",
    "geo": null,
    "user": {
      "name": "json_newb",
      "followers_count": 41
     }
},
{
    "id": 777777777888,
    "text": "dfngsdnglnsldfnsl",
    "geo": null,
    "user": {
      "name": "dsfgpd",
      "followers_count": 24
     }
}
] 

reader.beginArray();
        while(reader.hasNext()){
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("id")) {
                    System.out.println("id:" + reader.nextLong());
                } else if (name.equals("text")) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("user")) {
                    usernameObject();
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();
        }
reader.endArray();  
        

例子3. 

{
       "statuses":[
              {
      "id": 912345678901,
      "text": "How do Istream JSON in Java?",
      "geo": null,
      "user": {
       "name": "json_newb",
       "followers_count": 41
             }
      },
     
              {
      "id": 777777777888,
      "text":"dfngsdnglnsldfnsl",
      "geo": null,
      "user": {
       "name": "dsfgpd",
       "followers_count": 24
             }
      }
    ]
} 
    
  reader.beginObject();
        while(reader.hasNext())
        { 
            String begin = reader.nextName();
            if(begin.equals("statuses"))
            {
                array();
            }
        }
        reader.endObject();

       private void array() throws IOException{
        reader.beginArray();
        while(reader.hasNext()){
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("id")) {
                    System.out.println("id:" + reader.nextLong());
                } else if (name.equals("text")) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
                    System.out.println("text:" + reader.nextString());
                } else if (name.equals("user")) {
                    usernameObject();
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();
        }
        reader.endArray();
    }

       private void usernameObject() throws IOException{
        reader.beginObject();
        while (reader.hasNext()) {
            String nxtName = reader.nextName();
            if (nxtName.equals("name")) {
                System.out.println("nxtName:" + reader.nextString());
            } else if (nxtName.equals("followers_count")) {
                System.out.println("nxtName:" + reader.nextInt());
            }
        }
        reader.endObject();
  }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章