[转]Gson过滤字段
原文地址:http://my.oschina.net/orgsky/blog/368768
摘要 Gson过滤字段
目录[-]
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:排除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); // <--- }
方法2:排除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);
}
方法3:使用@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);
}
方法4:使用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过滤字段的更多相关文章
- php过滤字段htmlentities,htmlspecialchars,strip_tags
1.strip_tags:过滤html标签比如<a> <html> <script> 如: $str = '<a href="test.html&q ...
- 使用dao时,如何同时使用动态表名和过滤字段?
使用dao时,如何同时使用动态表名和过滤字段? 发布于 630天前 作者 wukonggg 316 次浏览 复制 上一个帖子 下一个帖子 标签: 无 如题.求样例代码 1 回复 wend ...
- Fastjson 实体类JSON化过滤字段操作-PropertyFilter
过滤实体类中年龄等于5的字段 List<Users> models=new ArrayList<>(); for(int i=0;i<11;i++){ Users mod ...
- Spring MVC灵活控制返回json的值(自定义过滤字段)
在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解”@ManyToOne(fetch = FetchType.LAZY)”以实现延迟加载的效果. 但是,在使用 ...
- FastJson序列化时过滤字段(属性)的方法总结
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法. 方法一.FastJson的注解 @JSONField(serialize ...
- fastjson过滤字段
1.注解(字段上添加) @JSONField(serialize=false) 2.过滤器 PropertyFilter propertyFilter = new PropertyFilter() { ...
- 过滤字段中HTML标签
代码中只是过滤了一部分标签,例如span这些还是没有过滤,如果有更好办法的,可以帮忙补充 create FUNCTION [dbo].[CleanHTML] (@HTMLText VARCHAR(MA ...
- Gson解决字段为空是报错的问题
json解析有很多工具,这里说的是最常用也是解析速度最快的Gson,Gson是google家出的,有一个缺点就是无法设置null替换, 我们只能手动的批量替换服务器返回的null了,正常的接口定义的时 ...
- PHP数组去重..............过滤字段
$test_data = M('hot'); //实例化数据表 $data = $test_data->Distinct(true)->field('descriprion')->o ...
随机推荐
- iOS之 opencv3.0.framework
本文章的目的是从源代码包中编译出opencv2.framework供IOS开发使用. 基本上是按照http://docs.opencv.org/3.0-beta/doc/tutorials/intro ...
- Mysql查询按照某字段指定顺序排序
在项目当中用到Sphinx的时候,很多人遇到了这样的问题:使用mysql+Sphinx检索出了相关度的ID后,如何按照指定ID在Mysql中进行排序呢?这里是我在项目中的解决方法: 1 SELECT ...
- Windows下 maven3.0.4的安装步骤+maven配置本地仓库
简单讲下maven的安装步骤: 1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量. 2.下载maven3,最新版本是Maven3.0.4 ,下载地址:http://m ...
- Safari 快捷键
标签和网页导航快捷键 8 个 切换到下一个标签页 – Control+Tab 切换到上一个标签页 – Control+Shift+Tab 向下滚动一屏 – 空格 向上滚动一屏 – Shift+空格 焦 ...
- PHP中设置时区方法小结
找到原因后,在网上搜索到了一些关于PHP的时区设置方法: 1.修改php.ini,在php.ini中找到data.timezone =去掉它前面的;号,然后设置data.timezone = “Asi ...
- Sublime Text插件:HTML-CSS-JS Prettify
该插件依赖到nodejs环境 1.安装 在Sublime Text中,按下Ctrl+Shift+P调出命令面板; 输入install 调出 Install Package 选项并回车; 输入prett ...
- Asp.net MVC中提交集合对象,实现Model绑定
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...
- FreeMarker 日期转换
${parameters.fieldDate?date} //标准日期转日期字符串 ${parameters.fie ...
- 总结eclipse中安装maven插件
当自己越来越多的接触到开源项目时,发现大多数的开源项目都是用maven来够建的.并且在开发应用时,也越来越意识到maven的确会解决很多问题,如果你要了解maven,可以参考:Maven入门指南(一) ...
- Windows服务调试小结(附Demo)
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 阅读目录 介绍 搭建环境 调试方式 Demo下载 本文版权归mephisto和博客园共有,欢迎转载,但须 ...