2016-01-06 133 views
1

當試圖解析先前由Jackson生成的一些JSON時,出現此錯誤。我生成JSON像這樣Jackson:無法將對象的實例反序列化爲START_ARRAY

String ret = ""; 
ret = mapper.writeValueAsString(message.getPayload()); 
message.setPayload(ret); 

凡message.getPayload()是一個HashMap,包含兩個字符串和各種對象的List這個實例。正是如此

Map<String, Object> ret = new HashMap<String, Object>(); 
String s = (String)message.getPayload(); 
ret = mapper.readValue(s, new TypeReference<Map<String, String>>(){}); 

檢查我應該如何正確地寫這個地圖JSON時,這將創建下列畸形的JSON

{ 
    "user" : "john d example", 
    "items" : [ { 
    "val" : 99.5, 
    "id" : "phone", 
    "qty" : 1 
    }, { 
    "val" : 15.5, 
    "id" : "wine", 
    "qty" : 4 
    } ], 
    "address" : "123 example street" 
} 

會拋出一個異常?

+0

getPayload返回一個HashMap,但setPayload接受一個字符串?有點奇怪。 – Reek

+0

那麼有效載荷是一個對象類型,我應該說在這個實例中getPayload返回一個HashMap,然後在數據上的字母被編碼爲一個字符串 – Madden

回答

2

TypeReference<Map<String, String>>應該是TypeReference<Map<String, Object>>。傑克遜正試圖解析值作爲字符串而不是列表,因爲這是它所期望的基於您通過的類型引用。

相關問題