原文地址: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过滤字段的更多相关文章

  1. php过滤字段htmlentities,htmlspecialchars,strip_tags

    1.strip_tags:过滤html标签比如<a> <html> <script> 如: $str = '<a href="test.html&q ...

  2. 使用dao时,如何同时使用动态表名和过滤字段?

    使用dao时,如何同时使用动态表名和过滤字段?  发布于 630天前  作者 wukonggg  316 次浏览  复制  上一个帖子  下一个帖子  标签: 无 如题.求样例代码 1 回复 wend ...

  3. Fastjson 实体类JSON化过滤字段操作-PropertyFilter

    过滤实体类中年龄等于5的字段 List<Users> models=new ArrayList<>(); for(int i=0;i<11;i++){ Users mod ...

  4. Spring MVC灵活控制返回json的值(自定义过滤字段)

    在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解”@ManyToOne(fetch = FetchType.LAZY)”以实现延迟加载的效果. 但是,在使用 ...

  5. FastJson序列化时过滤字段(属性)的方法总结

    FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法. 方法一.FastJson的注解 @JSONField(serialize ...

  6. fastjson过滤字段

    1.注解(字段上添加) @JSONField(serialize=false) 2.过滤器 PropertyFilter propertyFilter = new PropertyFilter() { ...

  7. 过滤字段中HTML标签

    代码中只是过滤了一部分标签,例如span这些还是没有过滤,如果有更好办法的,可以帮忙补充 create FUNCTION [dbo].[CleanHTML] (@HTMLText VARCHAR(MA ...

  8. Gson解决字段为空是报错的问题

    json解析有很多工具,这里说的是最常用也是解析速度最快的Gson,Gson是google家出的,有一个缺点就是无法设置null替换, 我们只能手动的批量替换服务器返回的null了,正常的接口定义的时 ...

  9. PHP数组去重..............过滤字段

    $test_data = M('hot'); //实例化数据表 $data = $test_data->Distinct(true)->field('descriprion')->o ...

随机推荐

  1. [原] Android 自定义View步骤

    例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...

  2. Android消息机制源码分析

    本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...

  3. 自动化部署与统一安装升级 - 类ansible工具 udeploy0.3版本发布 (更新时间2014-12-24)

    下载地址:  unifyDeploy0.1版本  unifyDeploy0.2版本     unifyDeploy0.3版本 (更新时间2014-07-25)   自动化部署与统一安装升级,适用于多资 ...

  4. 转载文章----IL反编译利器——Ildasm.exe和Reflector.exe:

    转载地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html 一:Ildasm.exe简介  这一微软VS自带工具, ...

  5. get请求报文

    GET /02_WEB_HTTP/index.html?username=admin&password=123123 HTTP/1.1 Accept: application/x-ms-app ...

  6. MVC WebAPI 三层分布式框架开发

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理 ...

  7. 在VC环境下执行代码出现错误

    这是在执行代码过程中出现的错误,源代码在别的电脑上能运行,在自己的VC里运行就出现错误,在网上也搜过解决办法,但还是有点不太理解,是编程环境的问题h还是代码本身也存在问题???

  8. Fourth glance in Go

    在Go里面的结构体和方法是很有意思的内容.它即和OO有点像,但又不完全一样.为什么这么说呢?当你把结构体映射为OO里面的类的时候,你给结构体添加方法,你就会发现其实方法与结构体并没有严格意义上的关系. ...

  9. Druid 介绍及配置

    1. Druid是什么? Druid是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能. 2. 在哪里下载druid 正式版本下载:maven中央仓库: http://cent ...

  10. JBOSS目录结构详细说明

    一.下载与安装. 如何下载以及安装配置,请参考:Windows下JBOSS安装配置图文教程 二.现在主要了解一下JBOSS目录结构. 1. 主目录: E:\jboos\jboss-6.1.0.Fina ...