Android中使用gson解析JSON

来源:互联网 发布:mac液体唇膏三文鱼粉 编辑:程序博客网 时间:2024/06/07 12:02

首先,我们需要在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();  }  

0 0
原创粉丝点击