发现了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的同学有所帮助。
相关推荐
SXIAOYI 2020-09-16
xiaonuoyal 2020-06-17
SXIAOYI 2020-06-11
yinbaoshiguang 2020-06-09
Chydar 2020-06-02
nalanrumeng 2020-06-01
xiaonuoyal 2020-06-01
nalanrumeng 2020-05-19
ITprivate 2020-04-15
xiaonuoyal 2020-04-14
ITprivate 2020-03-26
ITprivate 2020-02-12
nalanrumeng 2020-01-13
xiaonuoyal 2019-12-07
xiaonuoyal 2019-11-18
TOmyhonour 2019-11-16