gpt4 book ai didi

java - 如何使用 Jackson 将 JSON 对象转换为 Java HashMap?

转载 作者:行者123 更新时间:2023-12-01 20:51:53 32 4
gpt4 key购买 nike

我有这样的 JSON 结构:

{   
"person":
{
"name": "snoop",
"age": "22",
"sex": "male"
}
}

像这样的 bean :

public class Person {
HashMap<String,String> map;

//getters and setters
}

我希望将 JSON 中的所有键和值填充到 Person 类的映射内。我不想为 JSON 中的每个键创建 bean,例如 intageString name 等。

我尝试过以下示例,它适用于正常的 JSON 结构,如下所示:

{
"type": "Extends",
"target": "application",
"ret": "true"
}

程序是:

String jsonString = "{\"type\": \"Extends\", \"target\": \"application\", \"ret\":\"true\" }";

ObjectMapper mapper = new ObjectMapper();
try {
Map<String, Object> carMap = mapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {
});

for (Entry<String, Object> entry : carMap.entrySet()) {
System.out.println("key=" + entry.getKey() + " and value=" + entry.getValue());
}

} catch (Exception e) {
e.printStackTrace();
}

上面的程序运行良好,并从 JSON 获取 Hashmap 中的值。但对于前面提到的 Hashmap:

{   
"person":
{
"name": "snoop",
"age": "22",
"sex": "male"
}
}

它不起作用,并给出 NullPointerException 因为 Hashmap 为 null。

有什么方法可以使用 Jackson API 来填充 Person 类中的 Hashmap。

最佳答案

此处使用 JsonAnyGetterJsonAnySetter 注释。

例如:

Perosn 类:

@JsonRootName("person")
class Person {
HashMap<String, String> map = new HashMap<>();

@JsonAnyGetter
public Map<String, String> getMap() {
return map;
}

@JsonAnySetter
public void setMap(String name, String value) {
map.put(name, value);
}

}

反序列化逻辑:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
Person person = mapper.readValue(jsonString, Person.class);

关于java - 如何使用 Jackson 将 JSON 对象转换为 Java HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43246240/

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