杰克逊:无法反序列化START_ARRAY中的对象实例

时间:2016-01-06 17:51:29

标签: java json jackson

我在尝试解析以前用Jackson生成的一些JSON时遇到此错误。我像这样生成JSON

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

其中message.getPayload()是一个HashMap,在这个实例中包含两个字符串和一个各种对象的List。这会创建以下格式错误的JSON

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

因此在检查时抛出异常

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

我应该如何正确地将此地图写入JSON?

1 个答案:

答案 0 :(得分:2)

TypeReference<Map<String, String>>应为TypeReference<Map<String, Object>>。 Jackson试图将值解析为字符串而不是列表,因为这是基于您传入的TypeReference所期望的值。