[英]Jackson unable to map JSON to an Object containing a Map
我有一個像這樣的Java POJO:
public class Widget {
private Map<String,Object> params;
// Getter, setter, ctor, etc...
}
我有一個當前接收JSON String
,並且正在嘗試使用Jackson的ObjectMapper
將該JSON映射到Widget
實例中:
public Widget fromJSON(String json) {
ObjectMapper jsonMapper = new ObjectMapper();
return jsonMapper.readValue(json, Widget.class);
}
目前我傳遞的JSON是:
{
"params": [{
"acks": "all"
}, {
"retries": 0
}, {
"batch.size": 16384
}, {
"linger.ms": 1
}, {
"buffer.memory": 33554432
}, {
"key.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}, {
"value.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}]
}
運行時,出現以下異常:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance
of java.util.LinkedHashMap out of START_ARRAY token
我看到另一個問題解決了一個非常類似的問題,除了該問題使用Jackson來解決,將JSON映射到Java Map
,而不是包含 Java Map
的對象( Widget
)。
我已經使用http://jsonlint.com來驗證JSON是否有效。 因此,我需要更改JSON或代碼,或者可能兩者都更改。 有任何想法嗎?
JSON有效,但不適用於Map。 params
的值是一個數組,它應該是一個像這樣的對象:
{
"params": {
"acks": "all",
"retries": 0,
"batch.size": 16384,
"linger.ms": 1,
"buffer.memory": 33554432,
"key.serializer": "org.apache.kafka.common.serialization.StringSerializer",
"value.serializer": "org.apache.kafka.common.serialization.StringSerializer"
}
}
在《 傑克遜五分鍾》中,您可以找到以下關系:
Jackson將用於簡單數據綁定的具體Java類型是:
╔══════════════════════╦══════════════════════════════╗ ║ JSON Type ║ Java Type ║ ╠══════════════════════╬══════════════════════════════╣ ║ object ║ LinkedHashMap<String,Object> ║ ║ array ║ ArrayList<Object> ║ ║ string ║ String ║ ║ number (no fraction) ║ Integer, Long or BigInteger ║ ║ number (fraction) ║ Double (or BigDecimal) ║ ║ true|false ║ Boolean ║ ║ null ║ null ║ ╚══════════════════════╩══════════════════════════════╝
List<Map<String, Object>>
應該可以解決問題:
public class Widget {
private List<Map<String, Object>> params;
// Getter and setters ommited
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.