Java/Jackson:使用HashMap将JSON反序列化到类中
我想反序列化以下JSON输入:Java/Jackson:使用HashMap将JSON反序列化到类中,java,json,hashmap,jackson,deserialization,Java,Json,Hashmap,Jackson,Deserialization,我想反序列化以下JSON输入: { "key1": "value1", "key2": "value2" } 到包含哈希映射的类对象中: public class ClassContainingMap { private Map<String, String> map = new HashMap<>(); public Map<String, String> getMap() { return map; } publi
{
"key1": "value1",
"key2": "value2"
}
到包含哈希映射的类对象中:
public class ClassContainingMap {
private Map<String, String> map = new HashMap<>();
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
我明白了
我发现在用
@JsonValue
注释getter时,我可以实现另一个方向(序列化),但到目前为止,我还没有找到反序列化的方法。有没有简单的(注释?)方法来实现这一点,而不必编写自定义反序列化程序?您没有提供如何使用@JsonValue
注释的示例,因此我可能错过了一些东西,但无论如何
在序列化时,我认为您可以执行以下操作:
ClassContainingMap ccm = new ClassContainingMap();
ccm.getMap().put("key1", "value1");
ccm.getMap().put("key2", "value2");
System.out.println(om.writeValueAsString(ccm));
这将起作用并产生以下JSON:
{
"map": {
"key1":"value1",
"key2":"value2",
}
}
但这并不等于要读取到ClassContainingMap
的JSON结构:
{
"key1": "value1",
"key2": "value2"
}
也就是说,前者是来自ClassContainingMap
的数据,后者是“仅”Map
,我认为您希望在ClassContainingMap
中填充它
您有两个选项要检查,您可以
ClassContainingMap
Map map = om.readValue(i, Map.class);
@JsonCreator
@JsonCreator(mode=Mode.DELEGATING)
public ClassContainingMap(@JsonProperty("map")Map<String,String> map) {
this.map = map;
}
@JsonValue
public Map<String, String> getMap() {
return map;
}
@JsonCreator(mode=mode.deleging)
public ClassContainingMap(@JsonProperty(“map”)map){
this.map=map;
}
@JsonValue
公共地图getMap(){
返回图;
}
查看有关第三个的更多信息,例如关于序列化的——如果我用
@JsonValue
注释public-Map-getMap()
,那么它将被序列化为所需的JSON结构。关于1
-不幸的是这不可能,因为它是JSON作为POST有效负载出现的,而2
-是的,这可能就是我最终要做的。没什么大不了的,只是想看看是否有任何注释可以达到反序列化的等效效果(我知道这是非常特殊的用例,因为类只有一个map成员)。无论如何,谢谢@dflachbart更新了一点答案。这是一个品味的问题-我想-如果第三个比第二个更方便。也许你可以用?@Federicoperaltachaffner是的,我试过了,但它似乎不起作用Map@pirho太好了,感谢您指出JsonCreator
,这很有效!
Map map = om.readValue(i, Map.class);
@JsonCreator(mode=Mode.DELEGATING)
public ClassContainingMap(@JsonProperty("map")Map<String,String> map) {
this.map = map;
}
@JsonValue
public Map<String, String> getMap() {
return map;
}