【问题标题】:How to convert JSON Object to Java HashMap using Jackson?如何使用 Jackson 将 JSON 对象转换为 Java HashMap?
【发布时间】:2017-08-31 22:57:12
【问题描述】:

我有这样的 JSON 结构:

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

还有这样的豆子:

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

    //getters and setters
}

我希望 JSON 中的所有键和值都填充到 Person 类的映射中。 我不想为来自 JSON 的每个键创建 bean,例如 int ageString 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"
    }
}

它不起作用并在 Hashmap 为空时给出NullPointerException

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

【问题讨论】:

标签: java json hashmap jackson


【解决方案1】:

在此处使用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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2017-02-04
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多