首页 > 解决方案 > 我需要用杰克逊将 JSON 数组反序列化为 HashMap

问题描述

我有一个需要反序列化为 HashMap 的 json 文件。

我需要一个 {name, HashMap<valuename, value>} 类型的 HashMap

示例:{aaa={value1=111, value2=222, value3=333}, bbb={value1=444, value2=555, value3=666}}

不幸的是,我是 json 和 jackson 的新手。

先感谢您。

这是我的json

[
    {
        "name": "aaa",
        "values" : {
            "value1" : 111,
            "value2" : 222,
            "value3" : 333
        }
    },
    {
        "name": "bbb",
        "values" : {
            "value1" : 444,
            "value2" : 555,
            "value3" : 666
        }
    }
]

和我的课:

public class Elements {
    
    @JsonProperty("name")
    String name;
    @JsonProperty("values")
    Values values;
    
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Values getValues() {
        return this.values;
    }

    public void setValues(Values values) {
        this.values = values;
    }
}
public class Values {
    @JsonProperty("value1")
    int value1;
    @JsonProperty("value2")
    int value2;
    @JsonProperty("value3")
    int value3;

    public int getValue1() {
        return this.value1;
    }

    public void setValue1(int value1) {
        this.value1 = value1;
    }

    public int getValue2() {
        return this.value2;
    }

    public void setValue2(int value2) {
        this.value2 = value2;
    }

    public int getValue3() {
        return this.value3;
    }

    public void setValue3(int value3) {
        this.value3 = value3;
    }
}

标签: javajsonjackson

解决方案


只需将其作为实例读取并将其List收集Map到新的Map反序列化过程后:

List<Map<String, Object>> listOfMaps = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {});
Map<String, Object> desiredMap = listOfMaps.stream().collect(HashMap::new,
        (result, map) -> result.put(map.get("name").toString(), map.get("values")),
        (existing, replacement) -> { });

推荐阅读