最新消息:欢迎访问Android开发中文站!商务联系QQ:1304524325

超好用的json解析工具——Gson项目使用介绍

新手入门 AndroidChina 6148浏览 0评论

在上一篇文章中,我们简单的介绍了json数据格式,并介绍了如何使用Android自带的json工具,完成json数据的生成与解析。但是就像我所说的,自带的工具类太难用了!因此这篇文章,会介绍一个json解析的非常好的工具,那就是google的开源项目Gson。

咱们这次不介绍Gson里面的常用类了,因为常用的几个类非常的简单,我们直接上手开始用,看看Gson是多么的强大!

当然,如果使用第三方的项目,我们肯定要导入jar包了,一搜一大把哈。

给出测试Model代码


package com.example.jsondemo;

public class Person {

      private String name;
      private int age;
      private Birthday birthday;

      public String getName() {
            return name;
      }

      public void setName(String name) {
            this.name = name;
      }

      public int getAge() {
            return age;
      }

      public void setAge(int age) {
           this.age = age;
      }

      public Birthday getBirthday() {
           return birthday;
      }

      public void setBirthday(Birthday birthday) {
           this.birthday = birthday;
      }

      public Person() {
           super();
      }

      public Person(String name, int age, Birthday birthday) {
           super();
           this.name = name;
           this.age = age;
           this.birthday = birthday;
      }

      @Override
      public String toString() {
           return "Person [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
      }

}


package com.example.jsondemo;

/**
 *
 * @ClassName: com.example.jsondemo.Birthday
 * @Description: 生日类
 * @author zhaokaiqiang
 * @date 2014-11-26 上午10:29:47
 *
 */
public class Birthday {

     private int year;
     private int month;
     private int day;

     public int getYear() {
          return year;
     }

     public void setYear(int year) {
          this.year = year;
     }

     public int getMonth() {
          return month;
     }

     public void setMonth(int month) {
          this.month = month;
     }

     public int getDay() {
          return day;
     }

     public void setDay(int day) {
          this.day = day;
     }

     public Birthday() {
          super();
     }

     public Birthday(int year, int month, int day) {
          super();
          this.year = year;
          this.month = month;
          this.day = day;
     }

     @Override
     public String toString() {
           return "Birthday [year=" + year + ", month=" + month + ", day=" + day + "]";
     }

}

1.Object与Json的相互转换

咱们先从最简单的单一对象开始说。

下面是代码实现


/**
 * 单一对象的json生成与解析
 */
 public void objectToJson() {

      Person p = new Person("zhaokaiqiang", 22, new Birthday(1992, 1, 19));
      Gson gson = new Gson();

      String jsonString = gson.toJson(p);

      Log.d(TAG, "---------单一对象生成--------");
      Log.d(TAG, jsonString);

      Person person = gson.fromJson(jsonString, Person.class);

      Log.d(TAG, "---------单一对象解析--------");
      Log.d(TAG, person.toString());

}

这代码是多么的简洁,美观啊!

在上一篇的文章中,如果要生成简单对象的话,我们还需要自己指定key,然后设置value,自从用了Gson,我们再也没有这些烦恼了!而且为了说明Gson的强大之处,我还特意给Person设置了一个对象Birthday,如果使用自带的json工具,那不就麻烦死了。但是使用Gson,根本不需要有这些顾虑。看下面的转换结果,一个toJson(),完全解决问题,太棒了!


11-26 16:16:38.392: D/GsonTest(16931): ---------单一对象生成--------
11-26 16:16:38.392: D/GsonTest(16931): {"name":"zhaokaiqiang","birthday":{"day":19,"month":1,"year":1992},"age":22}
11-26 16:16:38.392: D/GsonTest(16931): ---------单一对象解析--------
11-26 16:16:38.392: D/GsonTest(16931): Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]]

2.集合与Json的相互转换

Gson除了可以很方便的与单一对象进行转换之外,还能够与集合进行转换。

下面是一个生成Json,并完成解析的代码:


/**
 * 集合对象的json生成与解析
 */
 public void objectsToJson() {

      Gson gson = new Gson();
      Person person = new Person("zhaokaiqiang", 22, new Birthday(1992, 1, 19));
      ArrayList<Person> arrayList = new ArrayList<Person>();
      arrayList.add(person);
      arrayList.add(person);
      arrayList.add(person);

      String jsonString = gson.toJson(arrayList);

      Log.d(TAG, "---------集合对象生成--------");
      Log.d(TAG, jsonString);

      Type type = new TypeToken<ArrayList<Person>>() { }.getType();

      ArrayList<Person> persons = gson.fromJson(jsonString, type);

      Log.d(TAG, "---------集合对象解析--------");
      Log.d(TAG, persons.toString());
 }

这是转换出来的结果


---------集合对象生成--------
[{"name":"zhaokaiqiang","birthday":{"day":19,"month":1,"year":1992},"age":22},{"name":"zhaokaiqiang","birthday":{"day":19,"month":1,"year":1992},"age":22},{"name":"zhaokaiqiang","birthday":{"day":19,"month":1,"year":1992},"age":22}]
 ---------集合对象解析--------
 [Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]], Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]], Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]]]

还记得我们使用json如果想完成类似的功能的时候,是不可想象的,但是使用Gson来实现的话,确实如此的简单。

在使用Gson.toJson()方法的时候,我们可以把任何对象或者是集合放进去,就可以完美的转换成json格式。

如果想把json格式的数据转换成我们想要的对象,我们只需要调用Gson.fromJson()即可。

但是在转换的时候,第二个参数有两种形式,一种是Class<?>,这个是转换单一的对象的时候,我们需要把对象.class传递进去,告诉转换器要转换的类型。如果我们需要转换的是集合,我们需要传递一个实现Type接口的实例,具体语法就和上面的代码一样,集合类型还有具体的对象换一下就可以了。

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

转载请注明:Android开发中文站 » 超好用的json解析工具——Gson项目使用介绍

您必须 登录 才能发表评论!