GSON使用笔记(1) -- 序列化时排除字段的几种方式
http://blog.csdn.net/zxhoo/article/details/21471005
GSON是Google发布的JSON序列化/反序列化工具,非常容易使用。本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段。
最简单的用法
假设有下面这个类:
- class MyObj {
- public int x;
- public int y;
- public MyObj(int x, int y) {
- this.x = x;
- this.y = y;
- }
- }
最简单的GSON用法如下所示:
- @Test
- public void gson() {
- MyObj obj = new MyObj(1, 2);
- String json = new Gson().toJson(obj);
- Assert.assertEquals("{\"x\":1,\"y\":2}", json);
- }
方法1:排除null字段
null字段,默认就不会序列化的,如下所示:
- class MyObj {
- private int intField;
- private String strField;
- }
- @Test
- public void gson() {
- MyObj obj = new MyObj();
- Assert.assertEquals("{\"intField\":0}", new Gson().toJson(obj));
- }
要想序列化null字段,需要显示的进行设置:
- @Test
- public void serializeNulls() {
- MyObj obj = new MyObj();
- Gson gson = new GsonBuilder().serializeNulls().create();
- Assert.assertEquals("{\"intField\":0,\"strField\":null}", gson.toJson(obj));
- }
方法2:排除transient字段
这个方法最简单,给字段加上transient修饰符就可以了,如下所示:
- class MyObj {
- public transient int x; // <---
- public int y;
- public MyObj(int x, int y) {
- this.x = x;
- this.y = y;
- }
- }
- @Test
- public void gson() {
- MyObj obj = new MyObj(1, 2);
- String json = new Gson().toJson(obj);
- Assert.assertEquals("{\"y\":2}", json); // <---
- }
方法3:排除Modifier为指定类型的字段
这个方法需要用GsonBuilder定制一个GSON实例,如下所示:
- class MyObj {
- protected int x; // <---
- public int y;
- public MyObj(int x, int y) {
- this.x = x;
- this.y = y;
- }
- }
- @Test
- public void gson() {
- Gson gson = new GsonBuilder()
- .excludeFieldsWithModifiers(Modifier.PROTECTED) // <---
- .create();
- MyObj obj = new MyObj(1, 2);
- String json = gson.toJson(obj); // <---
- Assert.assertEquals("{\"y\":2}", json);
- }
方法4:使用@Expose注解
注意,没有被@Expose标注的字段会被排除,如下所示:
- class MyObj {
- public int x;
- @Expose public int y; // <---
- public MyObj(int x, int y) {
- this.x = x;
- this.y = y;
- }
- }
- @Test
- public void gson() {
- Gson gson = new GsonBuilder()
- .excludeFieldsWithoutExposeAnnotation() // <---
- .create();
- MyObj obj = new MyObj(1, 2);
- String json = gson.toJson(obj);
- Assert.assertEquals("{\"y\":2}", json);
- }
方法5:使用ExclusionStrategy定制字段排除策略
这种方式最灵活,下面的例子把所有以下划线开头的字段全部都排除掉:
- class MyObj {
- public int _x; // <---
- public int y;
- public MyObj(int x, int y) {
- this._x = x;
- this.y = y;
- }
- }
- @Test
- public void gson() {
- ExclusionStrategy myExclusionStrategy = new ExclusionStrategy() {
- @Override
- public boolean shouldSkipField(FieldAttributes fa) {
- return fa.getName().startsWith("_"); // <---
- }
- @Override
- public boolean shouldSkipClass(Class<?> clazz) {
- return false;
- }
- };
- Gson gson = new GsonBuilder()
- .setExclusionStrategies(myExclusionStrategy) // <---
- .create();
- MyObj obj = new MyObj(1, 2);
- String json = gson.toJson(obj);
- Assert.assertEquals("{\"y\":2}", json);
- }
GSON使用笔记(1) -- 序列化时排除字段的几种方式相关推荐
- 【java】Java运行时动态生成类几种方式
1.概述 转载:Java运行时动态生成类几种方式 这里发现自己不知道的,原来Java 还能自己编译自己,学到了. 最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则.这就要求根据数据库数据动态生 ...
- html js 设置样式,原生js设置样式 笔记:JS设置CSS样式的几种方式
document(id名).style.backgroundColor = "ren" css里的属性有-的就去掉将首字母大写. js如何添加CSS样式中的class添加属性 用J ...
- 从 Gson 中的序列化中排除字段
1. 概述 在这个简短的教程中,我们将探索从 Gson 序列化中排除 Java 类及其子类的一个或多个字段的可用选项. 2. 初始设置 让我们首先定义我们的类: @Data @AllArgsConst ...
- fastjson 不转某些字段_全面总结Fastjson过滤字段、排除字段的5种方法(含示例)...
1.通过注解指定不需要序列化的字段 在不需要序列化的字段,添加@JSONField(serialize = false)注解可进行排除. public class DontSerializeAnnot ...
- 实现自定义字段的几种方式
谈一谈自定义字段实现的几种方式 我们经常会遇到项目中很多对表单进行自定义,比如说saas应用针对租户自定义表单字段名称,自定义列表名称. 还有更高级自定义,比如说自定义的模块,表单.字段.字段类型.流 ...
- 命令行运行Python脚本时传入参数的三种方式
三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...
- Android 编程下帧动画在 Activity 启动时自动运行的几种方式
Android 开发过程中部分 Activity 在显示的时候就要求给用户显示一个进度框来改善用户体验,比如:Activity 在启动的时候就去联网请求数据.读取数据库内容等.进度框显示样式如下,采用 ...
- linux启动时挂载rootfs的几种方式 .
转载链接:http://blog.csdn.net/zuokong/article/details/9022707 根文件系统(在样例错误消息中名为 rootfs)是 Linux 的最基本的组件.根文 ...
- 008_Gson从序列化中排除字段
1. 默认情况下, GSON从序列化/反序列化过程中排除瞬态和静态字段. 2. 例子 2.1. 新建一个名为GsonExcludeFields的Java项目, 同时添加相关jar包. 2.2. 新建S ...
最新文章
- DataReader方式 获取数据
- ABAP 如何实现屏幕字段不可输入
- Linux 磁盘管理 二(Raid、LVM、Quota)
- 使用百度UEditor
- sigar如何获取linux的buffer内存,Linux 下使用Sigar 获取内存信息
- 纽约时报》:乔布斯和苹果的“保密文化”
- linux下时区的一些认识
- JSF是什么?它与Struts是什么关系?
- 王道机试指南读后总结-5(迷宫深搜问题详解)
- Python办公自动化 - 2 Word办公自动化
- “会用LabVIEW,但是却没有听说TestStand,好像有点说不过去吧!”(下)
- 双基因突变患者_肺癌多EGFR基因突变 7成脑转移 双标靶并用 有效控制肿瘤
- Package.json文件配置
- download 下载文件 IE兼容性处理
- 将小米SoundMove 无缝接入 ChatGPT
- XTransfer又双叒叕拿奖,XTransfer外贸收款这么靠谱吗?
- Win10 下安装Mathtype6.9 + office2013+EndNote-x8
- 深入浅出Java clone技术
- 2007年最杰出十大新锐站长评选-------关注!
- myeclipse下载git中的代码步骤