2015-09-07 59 views
2

我有以下2類:無法通過字符串實例化java.util.LinkedHashMap類型的值value('{');無單String構造/工廠方法

@JsonIgnoreProperties(ignoreUnknown = true) 
public class ChangesJSON { 

    @JsonProperty("changes") 
    List<ChangeJSON> changes; 

    @JsonProperty("more") 
    Boolean more; 
} 

public class ChangeJSON { 

    @JsonProperty("epoch") 
    Long epoch; 

    @JsonProperty("payload") 
    Map<String, Object> payload; 
} 

當我嘗試使用這個測試反序列化:

String test = "{\"changes\":[{\"epoch\":1441556306522,\"payload\":\"{\"to\":1}\"},{\"epoch\":1441555481524,\"payload\":\"{\"to\":-1}\"}],\"more\":false}"; 

@Test 
public void myTest() { 
    ObjectMapper mapper = new ObjectMapper(); 
    ChangesJSON result = null; 
    try { 
     result = mapper.readValue(test, ChangesJSON.class); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    assertNotNull(result); 
} 

我得到以下異常:

com.fasterxml.jackson.databind.JsonMappingException:不能從實例化類型爲java.util.LinkedHashMap的值的值 10('{'); [來源: {「changes」:[{「epoch」:1441556306522,「payload」:「{」to「:1}」},{「epoch」:1441555481524,「payload 「:」{ 「到」: - 1} 「}],」 更多「:假}; 行:1,柱:35](通過參考鏈: demo.ChangesJSON [ 「變化」] - >的java.util.ArrayList [0] - > demo.ChangeJSON [ 「有效載荷」])

看起來地圖有問題,但我認爲傑克遜應該能夠處理地圖。當我將地圖更改爲地圖時,我也遇到同樣的問題。但我確實需要支持各種各樣的類作爲地圖的值。

+0

你JSON是無效的。如果你刪除了轉義反斜線,它包含'「payload」:「{」to「:1}」}'而不是'「payload」:{「to」:1}}' –

回答

4

您在​​對象周圍有報價。嘗試改變這一部分:

\"payload\":\"{\"to\":1}\" 

到這一點:

\"payload\":{\"to\":1} 
0

我認爲這是JSON本身有問題。它取消轉義到:

{"changes":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload":"{"to":-1}"}],"more":false} 

這也許應該是這樣的:

{"changes":[{"epoch":1441556306522,"payload":{"to":1}},{"epoch":1441555481524,"payload":{"to":-1}}],"more":false} 

所以:

String test = "{\"changes\":[{\"epoch\":1441556306522,\"payload\":{\"to\":1}},{\"epoch\":1441555481524,\"payload\":{\"to\":-1}}],\"more\":false}"; 
相關問題