发现了google的gson,javabean与JSON转换

发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson。

经过比较,gson和其他现有javajson类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。

下面是一个简单的例子:

Java代码
01.1.public class Person {   

02.2.  

03.3.    private String name;   

04.4.    private int age;   

05.5.  

06.6.    /**  

07.7.     * @return the name  

08.8.     */  

09.9.    public String getName() {   

10.10.        return name;   

11.11.    }   

12.12.  

13.13.    /**  

14.14.     * @param name the name to set  

15.15.     */  

16.16.    public void setName(String name) {   

17.17.        this.name = name;   

18.18.    }   

19.19.  

20.20.    /**  

21.21.     * @return the age  

22.22.     */  

23.23.    public int getAge() {   

24.24.        return age;   

25.25.    }   

26.26.  

27.27.    /**  

28.28.     * @param age the age to set  

29.29.     */  

30.30.    public void setAge(int age) {   

31.31.        this.age = age;   

32.32.    }   

33.33.       

34.34.    @Override  

35.35.    public String toString()   

36.36.    {   

37.37.        return name + ":" +age;   

38.38.    }   

39.39.}  

40.public class Person {

41.

42.    private String name;

43.    private int age;

44.

45.    /**

46.     * @return the name

47.     */

48.    public String getName() {

49.        return name;

50.    }

51.

52.    /**

53.     * @param name the name to set

54.     */

55.    public void setName(String name) {

56.        this.name = name;

57.    }

58.

59.    /**

60.     * @return the age

61.     */

62.    public int getAge() {

63.        return age;

64.    }

65.

66.    /**

67.     * @param age the age to set

68.     */

69.    public void setAge(int age) {

70.        this.age = age;

71.    }

72.    

73.    @Override

74.    public String toString()

75.    {

76.        return name + ":" +age;

77.    }

78.}
复制代码实体很简单,两个字段,当然实体中的字段也可以是List或者Set类型的。
Java代码
01.1.Gson gson = new Gson();   

02.2.List<Person> persons = new ArrayList<Person>();   

03.3.for (int i = 0; i < 10; i++) {   

04.4.     Person p = new Person();   

05.5.     p.setName("name" + i);   

06.6.     p.setAge(i * 5);   

07.7.     persons.add(p);   

08.8.}   

09.9.String str = gson.toJson(persons);  

10.Gson gson = new Gson();

11.List<Person> persons = new ArrayList<Person>();

12.for (int i = 0; i < 10; i++) {

13.     Person p = new Person();

14.     p.setName("name" + i);

15.     p.setAge(i * 5);

16.     persons.add(p);

17.}

18.String str = gson.toJson(persons);
复制代码上面的代码重点是Gson对象,它提供了toJason()方法将对象转换成Json字符串,上面代码的str对象值为:
01.[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}] 
复制代码很标准的json数据,很简单吧,呵呵。 
下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。 
在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。 
先来看第一种: 
比如json字符串为:
01.[{"name":"name0","age":0}] 
复制代码代码: 

Java代码
01.1.Person person = gson.fromJson(str, Person.class);  

02.Person person = gson.fromJson(str, Person.class);
复制代码提供两个参数,分别是json字符串以及需要转换对象的类型。 
第二种,转换成列表类型: 
代码: 

Java代码
01.1.List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());   

02.2.for(int i = 0; i < ps.size() ; i++)   

03.3.{   

04.4.     Person p = ps.get(i);   

05.5.     System.out.println(p.toString());   

06.6.}  

07.List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

08.for(int i = 0; i < ps.size() ; i++)

09.{

10.     Person p = ps.get(i);

11.     System.out.println(p.toString());

12.}
复制代码可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

Gson的基本使用就是这么多,至于annotation方面可以参考gson的官方文档,希望能对初学java和gson的同学有所帮助。

相关推荐