如何在将对象转换为字符串时动态决定json项?

时间:2015-05-19 13:21:40

标签: java json gson

我需要在创建json字符串时动态包含字段。 目前,我可以使用gson.toJson()函数获取包含所有字段的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

1 个答案:

答案 0 :(得分: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;以确保您只跳过&#34; b&#34;来自XXX类的字段。如果XXX包含Foo个实例,则该实例为&#34; b&#34;字段,它不会被跳过。