java - 如何反序列化 Map<String, Object> 使用不同类型的不同 key 与 jackson ?

标签 java json jackson

有一个库类,定义是:

class LibraryBean {
    public String tag;
    public Map<String, Object> attributes;
}

在我的应用程序代码中,我知道 attributes 的每个可能的键map,并且某个key的value的类型是固定的,比如key是"location"那么值类型是Location , 如果键是 "timestamp"那么值类型是Long .写一个 ArrayList<LibraryBean>转换为 json 字符串很简单,但是我如何反序列化 json 字符串以便该值恢复其类型?

public void test(ArrayList<LibraryBean> sampleList) { 
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeAsString(sampleList);

        List<LibraryBean> recovered = mapper.readValue(jsonString); // what should I do here?

        // I'm sure sampleList.get(0).attributes.get("location") != null
        AssertTrue(sampleList.get(0).attributes.get("location") instanceof Location);
    }

最佳答案

为已知字段创建 pojo:

class Attributes {
    private Location location;
    ...
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    ... getters and setters

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

}

class LibraryBean {
    private String tag;
    private Attributes attributes;

    ... getters and setters
}

关于java - 如何反序列化 Map<String, Object> 使用不同类型的不同 key 与 jackson ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643480/

相关文章:

java - 内存泄漏随着 T4CPreparedStatement 的增加

json - getJSON 与 optJSON

javascript - 检查 JSON 键/节点是否存在

javascript - 无法从 json 中提取键/值

java - jackson 反序列化绕过最终领域

java - 如何根据父级动态生成 JPA Id 列?

java - JGraphX - 单元格和双向边的自动组织

java - 是否可以从另一个类访问变量?

java - 集合上多个属性同时匹配

java - 解析包含数组字段的 JSON 数组