gpt4 book ai didi

java - 如何将值为json的Map转换为POJO

转载 作者:行者123 更新时间:2023-12-02 01:05:36 25 4
gpt4 key购买 nike

例如,我们的目标类型是 Info ,具有以下定义

class Info {
Person person;
// a dozen of other properties
// getters and setters
}

class Person {
String name;
int age;

// getters and setters
}

我们的 map 就像 Collections.singletonMap("person", "{\"name\":\"nick\",\"age\": 18}")

如何将此 Map 转换为 Info 对象? (为 Person 添加构造函数或逐一解析值是不可行的,因为实际上有十几个像 Person 这样的属性。)

尝试将 jackson 与 objectMapper.convertValue 一起使用,但它抛出异常并显示消息没有字符串参数构造函数/工厂方法来从字符串值反序列化

最佳答案

jackson 的ObjectMapper知道如何转换Map进入POJO ,但它无法将带有 JSON 文本的字符串映射到 POJO,因此您首先必须将 JSON 文本解析为通用内容( MapJsonNode 树)。

基本上,将您的 Map<String, String> 转换为进入Map<String, JsonNode> .

Map<String, String> data = Collections.singletonMap("person", "{\"name\": \"nick\", \"age\": 18}");

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> dataTree = new HashMap<>();
for (Entry<String, String> entry : data.entrySet())
dataTree.put(entry.getKey(), mapper.readTree(entry.getValue()));
Info info = mapper.convertValue(dataTree, Info.class);

System.out.println("name = " + info.getPerson().getName());
System.out.println("age = " + info.getPerson().getAge());

输出

name = nick
age = 18

关于java - 如何将值为json的Map<String, String>转换为POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60090025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com