1. 程式人生 > >gson實現字串與物件的相互轉換

gson實現字串與物件的相互轉換

最近一個專案需要用到JSON,需要在JSON字串和物件之間相互轉換,在網上找了些資料,發現google的Gson還是比較不錯的。

廢話不說,下面是簡單的例子:

先上原始碼:下載(包含jar包)

Person實體類

[java] view plain copy print?
  1. package com.hsun.json;  
  2. /** 
  3.  * Person 實體類 
  4.  * @author hsun 
  5.  * 
  6.  */
  7. publicclass Person {  
  8.     privateint id;  
  9.     private String name;  
  10.     privateint age;  
  11.     publicint
     getId() {  
  12.         return id;  
  13.     }  
  14.     publicvoid setId(int id) {  
  15.         this.id = id;  
  16.     }  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     publicvoid setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.     publicint getAge() {  
  24.         return age;  
  25.     }  
  26.     publicvoid
     setAge(int age) {  
  27.         this.age = age;  
  28.     }  
  29.     @Override
  30.     public String toString() {  
  31.         return“Person [id=” + id + “, 姓名=” + name + “, 年齡=” + age + “]”;  
  32.     }  
  33. }  
package com.hsun.json;
/**
 * Person 實體類
 * @author hsun
 *
 */
public class Person {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    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;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", 姓名=" + name + ", 年齡=" + age + "]";
    }
}
實體很簡單,當然Person的欄位也可以是List、Set、Map等~~~

把物件轉為JSON格式的字串

[java] view plain copy print?
  1. Gson gs = new Gson();  
  2. Person person = new Person();  
  3. person.setId(1);  
  4. person.setName(”我是醬油”);  
  5. person.setAge(24);  
  6. String objectStr = gs.toJson(person);//把物件轉為JSON格式的字串
  7. System.out.println(”把物件轉為JSON格式的字串///  ”+objectStr);  
       Gson gs = new Gson();

        Person person = new Person();
        person.setId(1);
        person.setName("我是醬油");
        person.setAge(24);

        String objectStr = gs.toJson(person);//把物件轉為JSON格式的字串
        System.out.println("把物件轉為JSON格式的字串///  "+objectStr);

上面的程式碼重點是Gson物件,它提供了toJason()方法將物件轉換成Json字串,上面程式碼的objectStr物件值為:

{“id”:1,”name”:”我是醬油”,”age”:24}

把List轉為JSON格式的字串

[java] view plain copy print?
  1. Gson gs = new Gson();  
  2. List<Person> persons = new ArrayList<Person>();  
  3. for (int i = 0; i < 10; i++) {//初始化測試資料
  4.     Person ps = new Person();  
  5.     ps.setId(i);  
  6.     ps.setName(”我是第”+i+“個”);  
  7.     ps.setAge(i+10);  
  8.     persons.add(ps);  
  9. }  
  10. String listStr = gs.toJson(persons);//把List轉為JSON格式的字串
  11. System.out.println(”把list轉為JSON格式的字串///  ”+listStr);  
        Gson gs = new Gson();

        List<Person> persons = new ArrayList<Person>();
        for (int i = 0; i < 10; i++) {//初始化測試資料
            Person ps = new Person();
            ps.setId(i);
            ps.setName("我是第"+i+"個");
            ps.setAge(i+10);
            persons.add(ps);
        }

        String listStr = gs.toJson(persons);//把List轉為JSON格式的字串
        System.out.println("把list轉為JSON格式的字串///  "+listStr);

上面程式碼的listStr物件值為:

[{“id”:0,”name”:”我是第0個”,”age”:10},{“id”:1,”name”:”我是第1個”,”age”:11},{“id”:2,”name”:”我是第2個”,”age”:12},{“id”:3,”name”:”我是第3個”,”age”:13},{“id”:4,”name”:”我是第4個”,”age”:14},{“id”:5,”name”:”我是第5個”,”age”:15},{“id”:6,”name”:”我是第6個”,”age”:16},{“id”:7,”name”:”我是第7個”,”age”:17},{“id”:8,”name”:”我是第8個”,”age”:18},{“id”:9,”name”:”我是第9個”,”age”:19}]

很標準的json資料~~~

下面來看看gson的反序列化,Gson提供了fromJson()方法來實現從Json相關物件到Java實體的方法。

我們一般都會碰到兩種情況,1:轉成單一實體物件  2:轉換成物件列表或者其他結構。

先看第一種:

JSON字串為上面的objectStr:{“id”:1,”name”:”我是醬油”,”age”:24}

程式碼:

[java] view plain copy print?
  1.         Person jsonObject = gs.fromJson(objectStr, Person.class);//把JSON字串轉為物件
  2.         System.out.println(”把JSON字串轉為物件///  ”+jsonObject.toString());  
        Person jsonObject = gs.fromJson(objectStr, Person.class);//把JSON字串轉為物件
        System.out.println("把JSON字串轉為物件///  "+jsonObject.toString());
提供兩個引數,分別是json字串以及需要轉換物件的型別。

第二種,轉換成列表型別:

JSON字串為上面的listStr:[{“id”:0,”name”:”我是第0個”,”age”:10},{“id”:1,”name”:”我是第1個”,”age”:11},{“id”:2,”name”:”我是第2個”,”age”:12},{“id”:3,”name”:”我是第3個”,”age”:13},{“id”:4,”name”:”我是第4個”,”age”:14},{“id”:5,”name”:”我是第5個”,”age”:15},{“id”:6,”name”:”我是第6個”,”age”:16},{“id”:7,”name”:”我是第7個”,”age”:17},{“id”:8,”name”:”我是第8個”,”age”:18},{“id”:9,”name”:”我是第9個”,”age”:19}]

程式碼:

[java] view plain copy print?
  1.         List<Person> jsonListObject = gs.fromJson(listStr, new TypeToken<List<Person>>(){}.getType());//把JSON格式的字串轉為List
  2.         for (Person p : jsonListObject) {  
  3.             System.out.println(”把JSON格式的字串轉為List///  ”+p.toString());  
  4.         }  
        List<Person> jsonListObject = gs.fromJson(listStr, new TypeToken<List<Person>>(){}.getType());//把JSON格式的字串轉為List
        for (Person p : jsonListObject) {
            System.out.println("把JSON格式的字串轉為List///  "+p.toString());
        }
可以看到上面的程式碼使用了TypeToken,它是Gson提供的資料型別轉換器,可以支援各種資料集合型別轉換。

Gson的基本使用就這麼多,其他請參考官方文件,希望對你們有幫助~~~