java - Jackson JSON objectmapper 反序列化为 LinkedHashMap 而不是 HashMap

标签 java json serialization jackson

我有一个带有内部 map 的 POJO。我希望将其从 JSON 反序列化为 HashMap,但 Jackson 将内部映射从 JSON 反序列化为 LinkedHashMap。我可以通过将Map的类型从“Map”更改为“HashMap”来强制它使用HashMap,但我想知道是否有办法告诉Jackson反序列化为Map的特定实现?

这是 JSON:

{
    "transforms": {
        "variable_name1": [{
            "min": 100,
            "max": 200,
            "value": 0.6
        }],
        "variable_name2": [{
            "min": 100,
            "max": 200,
            "value": 0.6
        }],
        "variable_name3": [{
            "min": 100,
            "max": 200,
            "value": 0.6
        }]
    }
}

以及 Transforms 类:

public class Transformer {
    Map<String, List<Transform>> transforms;

    public Transformer() {
        transforms = new HashMap<String, List<Transform>>();
    }

    public void setTransforms(Map<String, List<Transform>> transforms) {
        this.transforms = transforms;
    }
}

我如何使用 ObjectMapper:

try(Reader reader = new InputStreamReader(TransformTester.class.getResourceAsStream("transforms.json"), "UTF-8")) {
            ObjectMapper objMapper = new ObjectMapper();
            Transformer tr = objMapper.readValue(reader, Transformer.class);
}

最佳答案

如果您想要其他类型,您可以实现 Jackson 转换器并用它注释您的类。

public static class TransformConverter implements Converter<Map<String,List>,Map<String,List>>{

    @Override
    public Map<String,List> convert(Map<String,List> map) {
        return new HashMap<>(map);
    }

    @Override
    public JavaType getInputType(TypeFactory typeFactory) {
        return typeFactory.constructMapType(Map.class, String.class, List.class);
    }

    @Override
    public JavaType getOutputType(TypeFactory typeFactory) {
        return typeFactory.constructMapType(Map.class, String.class, List.class);
    }
}



public static class Transformer {
    @JsonDeserialize(converter = TransformConverter.class)
    Map<String, List<Transform>> transforms;
//rest of your class
}

关于java - Jackson JSON objectmapper 反序列化为 LinkedHashMap 而不是 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305787/

相关文章:

java - 使用 Gson 发布 (Android)

java - MySQL 语句关闭后不允许执行任何操作

java - Eclipse + Maven 插件 + EGit 插件 = 从 GitHub checkout 一个特定的分支和标签?

c# - JSON使用函数参数序列化一个对象

java - 如何将 Jackson 与泛型一起使用

java - 更新到 Spring Boot 1.5.8 和 Finchley/Edgware Spring Cloud 后出现 Feign 异常 403

c# - 如何在asp.net core 3中设置json序列化器设置?

Javascript- 从 JSON 对象中检索特定的键值

java - 非序列化的 Java 对象可以存储在 mySQL BLob 列中吗?

java - 在 Java 中使用序列化实现克隆方法是一种好习惯吗?