首页 > 代码库 > Gson的使用

Gson的使用

 

Gson拓展包可以很方便的实现在对象与Json之间的转换。他自己也有JsonObject这个类,类似于Android包里的JSONObject。在java(非Android项目)里就可以用他来操作json。

先要导入Gson包:

将gson-2.2.4.jar放入项目lib文件夹。然后项目刷新后右键-Build Path-Configure Build Path-->add jar在你的项目里找到它。

另外。注意更新!!!下载地址:https://code.google.com/p/google-gson/downloads/list

下面一个简单的例子:

public class Person {
    private String name;
    private int age;
    
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
}

 

 1.Gson的序列化,对象与String之间的转换

        Person p=new Person("jack",18);
        Gson gson=new Gson();
        String json=gson.toJson(p);
        Log.i(TAG, json);

  输出结果: {"name":"jack","age":18}

  对象数组的也是自动转换

        ArrayList<Person> p=new ArrayList<Person>();
        p.add(new Person("jack",18));
        p.add(new Person("alex",23));
        p.add(new Person("jane",15));
        Gson gson=new Gson();
        String json=gson.toJson(p);
        Log.i(TAG, json);

  输出结果: [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]

 

   2.Gson的反序列化,String与对象的转换

  jsonstr= {"name":"jack","age":18}

        Gson gson=new Gson();
        Person person=gson.fromJson(jsonstr, Person.class);

  

  jsonstr= [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]

        Gson gson=new Gson();
        Person[] person1=gson.fromJson(jsonstr, Person[].class);

  对于数组类可以直接转。但对于集合类就必须要用TypeToken。它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

        Gson gson=new Gson();
        ArrayList<Person> person2=gson.fromJson(jsonstr, new TypeToken<ArrayList<Person>>(){}.getType());

 

  还要说一下如果对象的某个值为null。这个属性将不会在String中显示。

        ArrayList<Person> p=new ArrayList<Person>();
        p.add(new Person("jack",18));
        p.add(new Person(null,23));
        p.add(new Person("jane",15));
        Gson gson=new Gson();
        String json=gson.toJson(p);
        Log.i(TAG, json);

  输出结果:[{"name":"jack","age":18},{"age":23},{"name":"jane","age":15}]

  如果要被序列化的String缺少某个属性例如上面的输出。也会转换成功。并且对应值为null。

 

  感觉平时就用到这么多了。

 

  还有一个在对象与JsonObject直接转的。但这个JsonObject不是Android的JSONObject所以很少用。

        Person p=new Person("jack",18);
        Gson gson=new Gson();
        JsonElement jsonele=gson.toJsonTree(p);
        JsonObject json=jsonele.getAsJsonObject();