小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

GSON使用筆記(1)

 王慶峰 2015-06-19

GSON是Google發(fā)布的JSON序列化/反序列化工具,非常容易使用。本文簡要討論在使用GSON將Java對象轉(zhuǎn)成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.       
  11. }  

最簡單的GSON用法如下所示:
  1. @Test  
  2. public void gson() {  
  3.     MyObj obj = new MyObj(12);  
  4.     String json = new Gson().toJson(obj);  
  5.     Assert.assertEquals("{\"x\":1,\"y\":2}", json);  
  6. }  

方法1:排除null字段

null字段,默認就不會序列化的,如下所示:

  1. class MyObj {  
  2.       
  3.     private int intField;  
  4.     private String strField;  
  5.       
  6. }  
  1. @Test  
  2. public void gson() {  
  3.     MyObj obj = new MyObj();  
  4.     Assert.assertEquals("{\"intField\":0}"new Gson().toJson(obj));  
  5. }  
要想序列化null字段,需要顯示的進行設置:
  1. @Test  
  2. public void serializeNulls() {  
  3.     MyObj obj = new MyObj();  
  4.     Gson gson = new GsonBuilder().serializeNulls().create();  
  5.     Assert.assertEquals("{\"intField\":0,\"strField\":null}", gson.toJson(obj));  
  6. }  

方法2:排除transient字段

這個方法最簡單,給字段加上transient修飾符就可以了,如下所示:

  1. class MyObj {  
  2.       
  3.     public transient int x; // <---  
  4.     public int y;  
  5.       
  6.     public MyObj(int x, int y) {  
  7.         this.x = x;  
  8.         this.y = y;  
  9.     }  
  10.       
  11. }  
  1. @Test  
  2. public void gson() {  
  3.     MyObj obj = new MyObj(12);  
  4.     String json = new Gson().toJson(obj);  
  5.     Assert.assertEquals("{\"y\":2}", json); // <---  
  6. }  

方法3:排除Modifier為指定類型的字段

這個方法需要用GsonBuilder定制一個GSON實例,如下所示:

  1. class MyObj {  
  2.       
  3.     protected int x; // <---  
  4.     public int y;  
  5.       
  6.     public MyObj(int x, int y) {  
  7.         this.x = x;  
  8.         this.y = y;  
  9.     }  
  10.       
  11. }  
  1. @Test  
  2. public void gson() {  
  3.     Gson gson = new GsonBuilder()  
  4.             .excludeFieldsWithModifiers(Modifier.PROTECTED) // <---  
  5.             .create();  
  6.       
  7.     MyObj obj = new MyObj(12);  
  8.     String json = gson.toJson(obj); // <---  
  9.     Assert.assertEquals("{\"y\":2}", json);  
  10. }  

方法4:使用@Expose注解

注意,沒有被@Expose標注的字段會被排除,如下所示:

  1. class MyObj {  
  2.       
  3.     public int x;  
  4.     @Expose public int y; // <---  
  5.       
  6.     public MyObj(int x, int y) {  
  7.         this.x = x;  
  8.         this.y = y;  
  9.     }  
  10.       
  11. }  
  1. @Test  
  2. public void gson() {  
  3.     Gson gson = new GsonBuilder()  
  4.             .excludeFieldsWithoutExposeAnnotation() // <---  
  5.             .create();  
  6.       
  7.     MyObj obj = new MyObj(12);  
  8.     String json = gson.toJson(obj);  
  9.     Assert.assertEquals("{\"y\":2}", json);  
  10. }  

方法5:使用ExclusionStrategy定制字段排除策略

這種方式最靈活,下面的例子把所有以下劃線開頭的字段全部都排除掉:

  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.       
  11. }  
  1. @Test  
  2. public void gson() {  
  3.     ExclusionStrategy myExclusionStrategy = new ExclusionStrategy() {  
  4.   
  5.         @Override  
  6.         public boolean shouldSkipField(FieldAttributes fa) {  
  7.             return fa.getName().startsWith("_"); // <---  
  8.         }  
  9.   
  10.         @Override  
  11.         public boolean shouldSkipClass(Class<?> clazz) {  
  12.             return false;  
  13.         }  
  14.           
  15.     };  
  16.       
  17.     Gson gson = new GsonBuilder()  
  18.             .setExclusionStrategies(myExclusionStrategy) // <---  
  19.             .create();  
  20.       
  21.     MyObj obj = new MyObj(12);  
  22.     String json = gson.toJson(obj);  
  23.     Assert.assertEquals("{\"y\":2}", json);  
  24. }  





    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多