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) -- 序列化时排除字段的几种方式的更多相关文章
- 命令行运行Python脚本时传入参数的三种方式
原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...
- Gson序列化对象时排除字段
import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; /** *Gson序列化对象排除属性 ...
- FastJson序列化时过滤字段(属性)的方法总结
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法. 方法一.FastJson的注解 @JSONField(serialize ...
- java 序列化时排除指定属性
java 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2- ...
- spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)
一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...
- 关于Linux启动时挂载rootfs的几种方式
一直对Linux启动时挂载根文件系统的过程存在着很多疑问,今天在水木精华区找到了有用的资料,摘录如下: 1.Linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等 ...
- 【开发笔记】- Java读取properties文件的五种方式
原文地址:https://www.cnblogs.com/hafiz/p/5876243.html 一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供j ...
- python中json序列化时汉字变成编码的解决方式
我们在使用json模块时,如果被序列化对象中不包含汉字,当然没有任何问题,但是有汉字会被编译成unicode码: import json dic = {","sex":& ...
- 精通awk系列(8):awk划分字段的3种方式
回到: Linux系列文章 Shell系列文章 Awk系列文章 详细分析awk字段分割 awk读取每一条记录之后,会将其赋值给$0,同时还会对这条记录按照预定义变量FS划分字段,将划分好的各个字段分别 ...
随机推荐
- 制作鼠标移动到div上面显示弹出框
<div class="show-dialog hide"> <header> <div class="note"> < ...
- Ext.NET-布局篇
概述 前一篇介绍了Ext.NET基础知识,并对Ext.NET布局进行了简要的说明,本文中我们用一个完整的示例代码来看看Ext.NET的布局. 示例代码下载地址>>>>> ...
- Windows8.1画热度图 - 坑
想要的效果 如上是silverlight版本.原理是设定一个调色板,为256的渐变色(存在一个png文件中,宽度为256,高度为1),然后针对要处理的距离矩阵图形,取图片中每个像素的Alpha值作为索 ...
- [转]搞ACM的你伤不起(转自Roba大神)
劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁再跟 ...
- 为什么要加入<!doctype html>这个文档声明——IE怪异模式
调试了很久,发现了一个非常细微但又十分重要的问题,又一次我在对于文档声明类型的时候,声明了如下类型 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- 39-tar 打包压缩
将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...
- Windows下Php安装mongodb扩展失败
查看php版本 下载对应的mongodb插件 将php_mongo.dll文件复制到php安装目录下的ext下 重启apache Apache –k restart 浏览器php.info( )测试 ...
- 直播CDN架构随想
互联网内容载体变迁历程,文字--图片/声音--视频--VR/AR----从直播1.0秀场时代(YY).2.0游戏直播(斗鱼.虎牙.熊猫)到如今全民直播3.0泛生活娱乐时代(映客.花椒),国外直播App ...
- 美发帮--android APP开发实战
登陆界面,LinearLayout ImageView Button 用到了ImageView自动缩放,和自定义Button形状及State-Drawable,还用到了动画. 自定义控件之圆形 ...
- 【转】JSP使用上传文件,并生产高清缩略图示例
原文地址:http://blog.csdn.net/yakson/article/details/9875731 前言 刚开始本来只想来测试一下Thumbnails生成缩略图的效果的,顺便来学一下js ...