意外的字符(“ =”(代码61)):解析JsonString时

时间:2018-07-17 17:55:24

标签: java java-8 jackson jsonparser

按如下方式解析JSONString(assigned=[util.TaskAudit@24c7b944]}):

Map<String, List<TaskAudit>> auditTrailMap = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

try {
    auditTrailMap = mapper.readValue(strObject, new TypeReference<Map<String, List<TaskAudit>>>(){});
} catch (IOException e) {
    log.error("{}", e);
}

我遇到以下异常:

  

com.fasterxml.jackson.core.JsonParseException:意外字符(“ =”(代码61)):期望冒号分隔字段名称和值       [来源]:{assigned = [util.TaskAudit@24c7b944]}的[junit];行:1,列:11]

任何人都可以提供有关解决方法的任何线索。

编辑:基本上,此函数的输入是来自数据库的字符串字段。保存时,我们将其保存为:

        Map<String, List<TaskAudit>> auditTrailMap = new HashMap<>();
        auditTrailMap.put("assigned", taskAuditList);
        String jsonString =  new JSONObject(auditTrailMap).toString();

但是在尝试解析jsonString时,它就像(assigned = [util.TaskAudit@24c7b944]})一样,我不知道'='的来源以及如何解析它。

2 个答案:

答案 0 :(得分:1)

  

任何人都可以提供有关解决方法的任何线索。

您已经拥有了

{assigned=[util.TaskAudit@24c7b944]}

不是有效的JSON字符串。

不需要Map的

toString()方法来返回JSON表示,因此您必须自己将其序列化为JSON,like in this answer

Map<String,String> payload = new HashMap<>();
payload.put("key1","value1");
payload.put("key2","value2");

// right way to convert map to JSON:
String json = new ObjectMapper().writeValueAsString(payload); 

使上面的代码适应您的需要,可能会重用ObjectMapper实例。

在采用新技术之前,请先阅读the docsexamples,因为它通常会突出显示人们使用图书馆的最常见情况,因此它将为您节省很多时间。

答案 1 :(得分:0)

方法的问题是“您试图以错误的方式将MAP解析为JSON。”

您需要在此处使用ObjectMapper将MAP解析为JSON字符串。完成此操作后,您应该能够根据地图中显示的键和值,按预期获得正确的JSON字符串。

   Map<String, List<TaskAudit>> auditTrailMap = new HashMap<>();
   auditTrailMap.put("assigned", taskAuditList);
   String jsonString =  new ObjectMapper().writeValueAsString(auditTrailMap); 

执行此操作后,您将获得正确的JSON: { “ assigned”:“您在地图中设置的密钥的对应值” }

希望这可以满足您的预期要求。