[转]Gson过滤字段

原文地址:http://my.oschina.net/orgsky/blog/368768

摘要 Gson过滤字段

Gson过滤字段 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);
    }
时间: 2024-11-19 08:13:13

[转]Gson过滤字段的相关文章

通过Gson过滤多余的字段

Gson是谷歌开源的一个工具类,在项目中我们经常将实体转化为json数据,当然将json数据转实体也是一样的,下面我们就简单的记录一下过滤多余字段的使用方法 1.使用transient关键字 使用transient,表示该字段在Java不会被序列化和反序列化 [email protected] 该注解是Gson自带的注解,@Expose是可以单独地控制序列化与反序列化的开关 3.通过排除策略 即使用GsonBuilder的setExclusionStrategies来设置,返回true表示跳过该

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

在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解"@ManyToOne(fetch = FetchType.LAZY)"以实现延迟加载的效果. 但是,在使用ajax请求数据,当需要返回的序列化数据中包含延迟加载的属性时,会出现错误,延迟加载的属性无法进行序列化.在这个时候,我们需要暂时取消延迟加载,以取到所有需要的数据. 可是,这样又会造成一堆垃圾数据的产生.序列化.传递至前台. 所以需要在控制层进行数据过滤,只序列化需要的数据. 具体过滤方

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

FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法. 方法一.FastJson的注解 1 @JSONField(serialize = false) 2 private String name; 最便捷,直接在实体的字段上加FastJson的注解serialize = false,转JSON字符串时就不会有该字段. 方法二.JAVA关键字 1 @JSONField(name = "AGE") 2 private

django浅谈 过滤字段内容

views.py class ConsultRecordModelForm(forms.ModelForm): class Meta: model = ConsultRecord # fields = "__all__" exclude=['delete_status'] def __init__(self,request, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['consultant'].que

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

1 $test_data = M('hot'); //实例化数据表 2 $data = $test_data->Distinct(true)->field('descriprion')->order('description desc')->select(); //利用distinct方法去重 3 $data = $test_data->group('department')->order('description desc')->select(); //利用gr

grep 打印出过滤字段及后3行内容

cat Controller.log | grep -A 3 'hello'

Android Volley解析(一)之GET、POST请求篇

一. Volley 的地位 自2013年Google I/O 大会上,Google 推出 Volley 之后,一直到至今,由于其使用简单.代码轻量.通信速度快.并发量大等特点,倍受开发者们的青睐. 先看两张图,让图片告诉我们 Volley 的用处: 第一张 Volley 的经典图 通过上图,我们可以发现 Volley适合网络通信频繁操作,并能同时实现多个网络通信. 第二张图 我们在以前在 ListView 的 item 中如果有网络请求,一般都是通过Task 异步任务来完成,并在完成之后通知 A

Android Vollay解析(一)之GET、POST请求篇

一. Vollay 的地位 自2013年Google I/O 大会上,Google 推出 Vollay 之后,一直到至今,由于其使用简单.代码轻量.通信速度快.并发量大等特点,倍受开发者们的青睐. 先看两张图,让图片告诉我们 Vollay 的用处: 第一张 Vollay 的经典图 通过上图,我们可以发现 Vollay适合网络通信频繁操作,并能同时实现多个网络通信. 第二张图 我们在以前在 ListView 的 item 中如果有网络请求,一般都是通过Task 异步任务来完成,并在完成之后通知 A

Java操作JSON数据(2)--Gson操作JSON数据

Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象.本介绍下Gson的基本使用方法,包括序列化和反序列化:文中所使用到的软件版本:Java 1.8.0_191.Gson 2.8.6. 1.引入依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactI