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();
  }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值