zoukankan      html  css  js  c++  java
  • [转]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);
        }
  • 相关阅读:
    Alpha冲刺总结
    测试随笔
    项目Alpha冲刺Day11
    项目Alpha冲刺Day12
    项目Alpha冲刺Day10
    项目Alpha冲刺Day9
    项目Alpha冲刺Day6
    beta冲刺1
    Beta准备博客
    基于微信小程序的实验室管理的postmortem
  • 原文地址:https://www.cnblogs.com/goyier/p/4766457.html
Copyright © 2011-2022 走看看