[英]java jackson deserialization with different type of nested objects
我有下面的json字段。 如何將其反序列化為String,String Map?
s:{
"g":0.0,
"p":0.0,
"m":0.0,
"media":{
"1":{"key":0,"value":0},
"2":{"key":0,"value":0},
"3":{"key":0,"value":0},
"4":{"key":0,"value":0},
...},
"pr":{
"1":{"key":0,"value":0},
"2":{"key":0,"value":0},
"3":{"key":0,"value":0},
...}
}
我已經嘗試過了
public JsonNode s;
@JsonGetter("s")
public Map<String,String> getS() {
if (s == null) {
return null;
}
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map;
map = mapper.convertValue(score, new TypeReference<Map<String, Object>>(){});
Map<String,String> result;
for (Map.Entry<String, Object> entry : map.entrySet()) {
if(entry.getValue() instanceof String){
result.put(entry.getKey(), (String) entry.getValue());
}
}
return result;
}
它可以用於測試,但是我收到下一個關於真實數據的錯誤
無法從[來源:UNKNOWN;在START_OBJECT令牌中反序列化java.lang.String實例。 行:-1,列:-1](通過參考鏈:java.util.LinkedHashMap [“ media”])
有什么建議嗎?
根據型號
@JsonGetter("s")
public Map<String,String> getS()
s
是Map<String,String>
但是JSON中的media
似乎是Object
(可能是Map<String, Map<String,String>>
)
"media":{
"1":{"key":0,"value":0},
"2":{"key":0,"value":0},
"3":{"key":0,"value":0},
"4":{"key":0,"value":0},
...},
也許你應該使用
@JsonGetter("s")
public Map<String,Object> getS()
然后進一步投射對象。
我已經解決了如下
for (Map.Entry<String, Object> entry : map.entrySet()) {
result.put(entry.getKey(), entry.getValue().toString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.