java - 映射到 JSON - 忽略特定键

标签 java json jackson gson

我想将 java 映射序列化为 json,我绝对可以使用 jackson 或 gson。

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

map 是。我没有/不希望我的 map 由 POJO 支持,因为键非常通用,可以是任何东西。据我了解,如果是POJO,我们可以使用Ignore Annotation来实现。

最佳答案

您可以创建一个扩展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();

关于java - 映射到 JSON - 忽略特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45167805/

相关文章:

json - 如何用自己的JSON转换器替换

java - JPA ManyToMany 关系和 JSON 序列化

java - 带有 token 存储的 CXF 自定义安全 token 提供商

java - "Rubber banding"会解决多人插值问题吗?

arrays - Elasticsearch Kibana中的映射数组(文本,数据)

json - Golang 将 json 映射到结构

python - 在 Delphi 中使用 MessagePack 序列化用户定义类型时可能出现编码问题?

java - 仅在超时后在 Windows 上的相同或不同端口上重新启动 Java RMI 注册表

java - 使用 Spring Boot 从 Eclipse 迁移到 IntelliJ

java - 如何将 Json String 映射到 POJO?