Json转换利器Gson之实例二-Gson注解和GsonBuilder

有时候我们不需要把实体的所有属性都导出,只想把一部分属性导出为Json.

有时候我们的实体类会随着版本的升级而修改.

有时候我们想对输出的json默认排好格式.

... ...

请看下面的例子吧:

实体类:

[java] view
plain
copy

  1. import java.util.Date;
  2. import com.google.gson.annotations.Expose;
  3. import com.google.gson.annotations.SerializedName;
  4. public class Student {
  5. private int id;
  6. @Expose
  7. private String name;
  8. @Expose
  9. @SerializedName("bir")
  10. private Date birthDay;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public Date getBirthDay() {
  24. return birthDay;
  25. }
  26. public void setBirthDay(Date birthDay) {
  27. this.birthDay = birthDay;
  28. }
  29. @Override
  30. public String toString() {
  31. return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
  32. + name + "]";
  33. }
  34. }

测试类:

[java] view
plain
copy

  1. import java.util.ArrayList;
  2. import java.util.Date;
  3. import java.util.List;
  4. import com.google.gson.FieldNamingPolicy;
  5. import com.google.gson.Gson;
  6. import com.google.gson.GsonBuilder;
  7. import com.google.gson.reflect.TypeToken;
  8. public class GsonTest2 {
  9. public static void main(String[] args) {
  10. //注意这里的Gson的构建方式为GsonBuilder,区别于test1中的Gson gson = new Gson();
  11. Gson gson = new GsonBuilder()
  12. .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
  13. .enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式
  14. .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式
  15. .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
  16. .setPrettyPrinting() //对json结果格式化.
  17. .setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
  18. //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
  19. //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
  20. .create();
  21. Student student1 = new Student();
  22. student1.setId(1);
  23. student1.setName("李坤");
  24. student1.setBirthDay(new Date());
  25. // //////////////////////////////////////////////////////////
  26. System.out.println("----------简单对象之间的转化-------------");
  27. // 简单的bean转为json
  28. String s1 = gson.toJson(student1);
  29. System.out.println("简单Bean转化为Json===" + s1);
  30. // json转为简单Bean
  31. Student student = gson.fromJson(s1, Student.class);
  32. System.out.println("Json转为简单Bean===" + student);
  33. // //////////////////////////////////////////////////////////
  34. Student student2 = new Student();
  35. student2.setId(2);
  36. student2.setName("曹贵生");
  37. student2.setBirthDay(new Date());
  38. Student student3 = new Student();
  39. student3.setId(3);
  40. student3.setName("柳波");
  41. student3.setBirthDay(new Date());
  42. List<Student> list = new ArrayList<Student>();
  43. list.add(student1);
  44. list.add(student2);
  45. list.add(student3);
  46. System.out.println("----------带泛型的List之间的转化-------------");
  47. // 带泛型的list转化为json
  48. String s2 = gson.toJson(list);
  49. System.out.println("带泛型的list转化为json==" + s2);
  50. // json转为带泛型的list
  51. List<Student> retList = gson.fromJson(s2,
  52. new TypeToken<List<Student>>() {
  53. }.getType());
  54. for (Student stu : retList) {
  55. System.out.println(stu);
  56. }
  57. }
  58. }

输出结果:

[plain] view
plain
copy

  1. ----------简单对象之间的转化-------------
  2. 简单Bean转化为Json==={
  3. "Name": "李坤",
  4. "bir": "2012-06-22 21:26:40:592"
  5. }
  6. Json转为简单Bean===Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=李坤]
  7. ----------带泛型的List之间的转化-------------
  8. 带泛型的list转化为json==[
  9. {
  10. "Name": "李坤",
  11. "bir": "2012-06-22 21:26:40:592"
  12. },
  13. {
  14. "Name": "曹贵生",
  15. "bir": "2012-06-22 21:26:40:625"
  16. },
  17. {
  18. "Name": "柳波",
  19. "bir": "2012-06-22 21:26:40:625"
  20. }
  21. ]
  22. Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=李坤]
  23. Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=曹贵生]
  24. Student [birthDay=Fri Jun 22 21:26:40 CST 2012, id=0, name=柳波]

Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (http://blog.csdn.net/lk_blog/article/details/7685169)

Json转换利器Gson之实例二-Gson注解和GsonBuilder (http://blog.csdn.net/lk_blog/article/details/7685190)

Json转换利器Gson之实例三-Map处理(上) (http://blog.csdn.net/lk_blog/article/details/7685210)

Json转换利器Gson之实例四-Map处理(下) (http://blog.csdn.net/lk_blog/article/details/7685224)

Json转换利器Gson之实例五-实际开发中的特殊需求处理 (http://blog.csdn.net/lk_blog/article/details/7685237)

Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 (http://blog.csdn.net/lk_blog/article/details/7685347)

实例代码下载: http://download.csdn.net/detail/lk_blog/4387822

时间: 2024-10-08 08:16:03

Json转换利器Gson之实例二-Gson注解和GsonBuilder的相关文章

从零开始学android开发-Json转换利器Gson之实例

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: http://code.google.com/p/google-gson/downloads/list 实体类: public class Student { private int id; private String name; private Date birthDay; public int

Json转换利器Gson之实例一-简单对象转化和带泛型的List转化

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: http://code.google.com/p/google-gson/downloads/list 实体类: [java] view plaincopy [java] view plaincopy public class Student { private int id; private Str

Json转换利器Gson之实例

描述 Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来 示例 import java.lang.reflect.Type; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import j

Json转换利器Gson—— List to Json

Json一种非常常用的数据交换方式,又因为我们现在Web框架使用的Easyui(其中最常用的table表格绑定的Json数据),Json的应用就必不可少了,我们现在从后台数据库得到的数据常用的类型是实体和list,都属于集合,性质是一样的,从实体或者list转成Json数据传到界面就是最关键的了. 其实Java中Json的解析方式有很多种,我们可以直接使用Java的JSONObject库,除此之外还有fastjson,Gson,jackson等等这些Json处理类库,共同之处不仅方便我们开发,转

Json转换工具类(基于google的Gson和阿里的fastjson)

在项目之中我们经常会涉及到字符串和各种对象的转换,为此特地整理了一下常用的转换方法 一.基于com.google.code.gson封装的json转换工具类 1. 在pom.xml文件里面引入gson的依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.3</version> &

[转]Json转换神器之Google Gson的使用

这几天,因为项目的需要,接触了Google的Gson库,发现这个东西很好用,遂记下简单的笔记,供以后参考.至于Gson是干什么的,有什么优点,请各位同学自行百度.话不多说,切入正题: 1. 下载Gson的jar包,拷贝到项目的lib文件夹中,并将其加入到buildPath中.使用maven的同学,直接在pom中加入以下依赖即可: ? 1 2 3 4 5 <dependency> <groupId>com.google.code.gson</groupId> <ar

java util - json转换工具 gson

需要 gson-2.7.jar 包 package cn.java.gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class Test { public static void main(String[] args) { dataType(); dataObj(); dataArray(); } publi

Json与Java对象互转之Gson学习

Json与Java对象互转之Gson学习 请尊重他人的劳动成果,转载请注明出处:Json与Java对象互转之Gson学习         我曾在<XML,Object,Json转换之浅析Xstream的使用>一文中介绍过使用XStream进行XML,Object,Json之间的转换,虽然XStream内置了对Json的支持,但是效果不是特别好,毕竟XStream重点不在Json.下面就介绍另外一种工具.           Gson(又称Google Gson)是Google公司发布的一个开放

各个JSON技术的比较(Jackson,Gson,Fastjson)的对比

JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar, 对于复杂类型的转换,json-lib对于json转换成bean还有缺