2015-05-19 34 views
1

我需要在創建json字符串時動態包含字段。 目前我可以通過使用gson.toJson()函數來獲得所有字段的json字符串。但在我的項目中,我可能需要在創建json字符串時避開字段。任何人都可以建議一種方法來做到這一點如何在將對象轉換爲字符串時動態決定json項目?

目前,我有一個類,如下:

class XXX { 
    int a; 
    int b; 
    int c; 
} 

我用

Gson gson_obd =new Gson(); 
String Json_final= gson_obd.toJson(new XXX()); 

得到完整的JSON字符串。但是,如何在創建json字符串時避免字段b

+0

hello teepeem。以下是我用來轉換爲字符串的代碼。我也修改了這個問題。請檢查並幫助我。 Gson gson_obd = new Gson(); \t \t \t \t \t \t String Json_final = gson_obd.toJson(new ObdJsonString());這是我用來轉換爲字符串的代碼。 – JVN

+0

嗨@Teepeemm,謝謝你的提供。我新發布在這個網站上的問題:)。我再次修改了這個問題。請檢查一下是否足夠。 [在questino gson_obd是一個gson對象] – JVN

回答

1

您可以添加排除策略並在Gson解析器中爲序列化過程進行註冊。

class MyExclusionStrategy implements ExclusionStrategy { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     //skip all b fields from the XXX class 
     return f.getName().equals("b") && f.getDeclaringClass() == XXX.class; 
    } 
    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
} 

String json = 
    new GsonBuilder().addSerializationExclusionStrategy(new MyExclusionStrategy()) 
        .setPrettyPrinting() 
        .create() 
        .toJson(new XXX()); 

輸出:

{ 
    "a": 0, 
    "c": 0 
} 

我加&& f.getDeclaringClass() == XXX.class;精確,你只跳過從XXX類的 「B」 字段。如果XXX包含作爲「b」字段的Foo實例,它將不會被跳過。

+0

這聽起來是正確的..是否有可能避免任何項目,如果其值爲0?比如,如果該類的b值爲0,則在創建字符串時應該避免。可能嗎? – JVN

+0

是的,上面的作品完美。爲更通用的,我使用它具有排除的值列表,並使用IAM這個列表來決定是否它要包含或沒有(例如:\t \t公共布爾shouldSkipField(FieldAttributes F){ \t \t \t回報excludeitems.contains( f.getName()); \t \t}) – JVN

+0

@JVN您可以創建自定義序列化程序。對於您序列化的每個實例,請檢查該字段的值是否爲0,並且不要將其添加到生成的Json中。 –

相關問題