2017-07-18 125 views
1

我想将一个java映射序列化成json,我可以肯定使用jackson或gson。映射到JSON - 忽略特定的键

但是当我序列化时,我想忽略指定键。可能吗?

地图是。我没有/希望我的Map支持POJO,因为这些键非常通用,可以是任何东西。我明白如果它是一个POJO,我们可以使用Ignore注释来实现。

+2

我看到一篇文章,也许可能是你的int他们创建了一个自定义映射序列化器。 https://stackoverflow.com/questions/30475174/serialize-hashmap-to-a-json-string-while-avoiding-certain-fields-in-java – cralfaro

+1

也许你可以创建一个副本(或使用原件)和删除你不感兴趣的值? –

回答

0

您可以创建扩展HashMap自定义类:

public class MyMap extends HashMap<String, Object> { 
} 

,然后注册一个自定义序列,如:

public class MyMapSerializer extends JsonSerializer<MyMap> { 
    @Override 
    public JsonElement serialize(MyMap arg0, Type arg1, JsonSerializationContext arg2) { 
     JsonObject result = new JsonObject(); 

     for (String k : arg0.keySet()) { 
      if (whatever your condition is) { 
       result.add(k, arg0.get(k)); 
      } 
     } 

     return result; 
    } 
} 

然后,当你创建GSON对象,你需要通过将其初始化通过一个串行器的实例:

Gson gson = new GsonBuilder().registerTypeAdapter(MyMap.class, new MyMapSerializer()).create();