转载请出自出处:http://eksliang.iteye.com/blog/2175473
一.概述
GsonBuilder用来定制java跟json之间的转换格式
二.基本使用
实体测试类:
温馨提示:默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法
package com.ickes.json.daomain; import java.util.Date; import com.google.gson.annotations.Expose; /** * @author Ickes */ public class User { private String id; @Expose //默认情况下序列化和反序列化都会使用 private String userName; @Expose(serialize=true,deserialize=false)//序列化时使用,反序列化不使用 private String userPwd; @Expose private Integer age; private Float price; @Expose private Date birthday; public User(String id, String userName, String userPwd, Integer age, Float price, Date birthday) { this.id = id; this.userName = userName; this.userPwd = userPwd; this.age = age; this.price = price; this.birthday = birthday; } get()和set()方法省略! @Override public String toString() { return "User [id=" + id + ", userName=" + userName + ", userPwd=" + userPwd + ", age=" + age + ", price=" + price + ", birthday=" + birthday + "]"; } }
测试类:
package com.ickes.json; import java.text.DateFormat; import java.util.Date; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ickes.json.daomain.User; public class GsonBuilderTest { public static void main(String[] args) { Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性 .serializeNulls() //当需要序列化的值为空时,采用null映射,否则会把该字段省略 .setDateFormat("yyyy-MM-dd HH:mm:ss") //日期格式转换 .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) //将属性的首字母大写 .setPrettyPrinting() //将结果进行格式化 .create(); User user = new User("A001", "xl","xl_123",24,12000F,new Date()); user.setAge(null); String json = gson.toJson(user); System.out.println("序列化:"+json); user = gson.fromJson(json,User.class); System.out.println("反序列化:\n"+user); } }
打印信息如下:
序列化:{ "UserName": "xl", "UserPwd": "xl_123", "Age": null, "Birthday": "2015-01-13 14:50:50" } 反序列化: User [id=null, userName=xl, userPwd=null, age=null, price=null, birthday=Tue Jan 13 14:50:50 CST 2015]
三、使用注解定制序列化字段
参考实例:
public class User { private String id; @Expose @SerializedName("name") //序列化时会把userName字段名映射为name private String userName; //序列化时使用,反序列化不使用该字段,默认都等于true @Expose(serialize=true,deserialize=false) private String userPwd; @Expose private Integer age; private Float price; @Expose private Date birthday; get()和set()方法省略......! }
执行上面测类打印结果:
序列化:{ "name": "xl", --序列化时,将userName转换为name "UserPwd": "xl_123", "Age": null, "Birthday": "2015-01-13 14:54:55" } 反序列化: User [id=null, userName=xl, userPwd=null, age=null, price=null, birthday=Tue Jan 13 14:54:55 CST 2015] --返序列化后userName仍然能映射回来
四、使用注解根据“版本”进行序列化和返序列化
有的字段不是一开始就有的,而是随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化
参考实例:
public class User { private String id; @Expose private String userName; @Expose(serialize=true,deserialize=false)//序列化时使用,反序列化不使用该字段 private String userPwd; @Expose @Since(1.1) //标记这个字段只有在1.1以上才会序列化和反序列化 private Integer age; @Since(1.2) //标记这个字段只有在1.2以上才会序列化和反序列化 @Expose private Float price; @Expose private Date birthday; get()和set()方法省略......! }
返回结果:
序列化:{ --序列化时可以明显看到price是1.2的版本,没有被序列化 "UserName": "xl", "UserPwd": "xl_123", "Age": 24, "Birthday": "2015-01-13 15:27:26" } 反序列化: User [id=null, userName=xl, userPwd=null, age=24, price=null, birthday=Tue Jan 13 15:27:26 CST 2015]
相关推荐
Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码...
7. **Builder模式配置**:Gson通过`GsonBuilder`类提供了丰富的配置选项,如设置日期格式、启用或禁用特定特性,甚至注册自定义类型适配器。 8. **性能优化**:Gson 2.8.x系列版本持续优化了性能,包括更快的序列化...
这个"Android Gson使用实例Demo"旨在帮助开发者理解如何在Android应用中有效地使用Gson库来解析和生成JSON。 Gson的核心功能在于将Java对象转换为对应的JSON字符串,以及将JSON字符串反序列化为Java对象。在Android...
### Gson的基本使用方法 1. **添加依赖** 在项目中使用Gson,首先需要将其依赖引入到项目中。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.code.gson</groupId> ...
本教程将详细讲解如何使用Gson库处理不同类型的JSON数据。 一、Gson库基础 1. 引入依赖:在Java项目中使用Gson,首先需要在项目构建文件(如Maven的pom.xml或Gradle的build.gradle)中引入Gson库的依赖。对于Maven...
二、添加Gson依赖 在使用Gson之前,需要在项目中引入Gson库。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.code.gson</groupId> <artifactId>gson <version>2.8.6 ``` 对于...
在本实例中,我们将深入探讨Gson库的使用方法,包括序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换回Java对象)。 首先,我们需要在项目中引入Gson库。如果你使用的是Maven,可以在pom.xml文件...
要使用GSON,首先需要在项目中引入GSON库。在Android Studio中,可以通过在`build.gradle`文件中添加依赖: ```gradle dependencies { implementation 'com.google.code.gson:gson:2.8.6' } ``` 然后同步项目,...
fastjson gson jackjson json-lib org.json的使用例子 package ivyy.taobao.com.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import ...
Gson库的使用非常简单,只需将其JAR包添加到项目的类路径中,然后即可通过Gson类提供的静态方法进行转换操作。Gson还提供了丰富的定制选项,允许开发者根据需要对转换过程进行微调,以满足特定的需求。
本文将围绕“gson转义字符”这一主题展开,深入探讨如何避免Gson在使用时自动将一些字符转为Unicode转义字符。 ### 一、问题背景 在Java项目中,我们经常会使用Gson来处理JSON格式的数据。例如,我们需要将一个...
使用 Gson 库,我们可以使用 GsonBuilder 来创建一个 Gson 对象,然后使用 fromJson() 方法将 JSON 字符串转换为 Java 对象。例如: ``` Gson gson = new GsonBuilder().create(); MyObject obj = gson.fromJson...
二、Gson的安装与导入 要使用Gson,首先需要将其添加到项目依赖中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.code.gson</groupId> <artifactId>gson <version>...
压缩包中的文件“Android中使用Gson解析JSON数据.docx”可能提供了关于在Android环境中具体如何集成和使用Gson的详细步骤,包括添加依赖、创建模型类、解析JSON响应以及处理可能出现的错误等内容。而“gson-2.7.jar...
下面我们将详细探讨Gson的使用方法,并结合给出的`MyGsonTest`文件,分析其核心概念和操作步骤。 首先,我们需要引入Gson库。如果你的项目是Maven或Gradle项目,可以在构建文件中添加依赖。对于Maven,这将在`pom....
4. **类型安全的转换**: 使用`Gson.fromJson()`的泛型方法,确保在反序列化时类型安全,防止数据类型不匹配的问题。 在项目"volley和Gson的二次封装"中,`DataFromNetApi`可能是一个包含具体网络接口请求和响应处理...
**二、Gson的主要功能** 1. **JSON序列化**: 将Java对象转换为JSON字符串。例如,一个User类的对象可以被转换成JSON格式的字符串。 2. **JSON反序列化**: 将JSON字符串解析为对应的Java对象。例如,一个JSON字符串...
本篇文章将深入探讨如何在使用Gson时进行自定义的序列化和反序列化,以及在遇到后端返回的数据类型与预期不符时的处理策略。 ### Gson自定义序列化 自定义序列化主要是为了在转换Java对象为JSON时,根据特定需求...
本教程将详细介绍如何使用Gson库实现在Java和JSON之间的数据互换。 ### Gson库的引入 首先,你需要在你的项目中引入Gson库。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
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...