【发布时间】:2015-09-07 06:08:56
【问题描述】:
我有以下两个课程:
@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: 不能 从 String 值实例化 java.util.LinkedHashMap 类型的值 ('{'); [来源:没有单字符串构造函数/工厂方法: {"更改":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload":"{"to":-1}"} ],"更多":false}; 行:1,列:35](通过参考链: demo.ChangesJSON["changes"]->java.util.ArrayList[0]->demo.ChangeJSON["payload"])
地图似乎有问题,但我认为杰克逊应该能够处理地图。当我将地图更改为 Map 时,我也会遇到同样的问题。但我确实需要支持各种类作为地图的值。
【问题讨论】:
-
您的 JSON 无效。如果您删除转义的反斜杠,它将包含
"payload": "{"to":1}"}而不是"payload": {"to":1}}
标签: java json jackson fasterxml