首页 > 代码库 > GSON将Java对象转成JSON时,如何排除某些字段

GSON将Java对象转成JSON时,如何排除某些字段

    1. GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用。本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段。

      最简单的用法

      假设有下面这个类:

       1 class MyObj { 2    3   public int x; 4   public int y; 5    6   public MyObj(int x, int y) { 7       this.x = x; 8       this.y = y; 9   }10 }

       

      最简单的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);    }

       

      来自http://blog.csdn.net/zxhoo/article/details/21471005

       

       

       

GSON将Java对象转成JSON时,如何排除某些字段