我需要使用Jackson将JSON数组反序列化为HashMap

qfe3c7zg  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(138)

我有一个json文件,我需要将其反序列化为HashMap。
我需要类型为{名称,哈希Map〈值名称,值〉}的哈希Map
例如:{aaa={值1 =111,值2 =222,值3 =333},bbb={值1 =444,值2 =555,值3 =666}}
不幸的是,我对杰森和Jackson还不熟悉。
先谢谢你了。
这是我的json

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

和我的班级:
第一个

64jmpszr

64jmpszr1#

只需将其作为Map示例的List读取,并在反序列化过程后将其收集到新的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) -> { });
a7qyws3x

a7qyws3x2#

我对Michal的回答投了赞成票,因为它真的很酷,满足了你的要求:
我需要类型为{名称,哈希Map〈值名称,值〉}的哈希Map
我不明白为什么要定义ElementsValues类,如果您想要的只是将数据存储在 *HashMap的HashMap * 中。
出于好奇,我用你的类测试了Jackson,它运行得很好:

// Deserialize as a list
List<Elements> listElements = objectMapper.readValue(JSON, new TypeReference<List<Elements>>(){});
// print elements
listElements.forEach(System.out::println);

相关问题