2017-02-10 51 views
1

无法解析我从我的服务中获得的json。我使用Jackson API来解析json。我越来越JsonParseException:JsonParseException与jsonResponse

com.fasterxml.jackson.databind.JsonMappingException: Unexpected character ('>' (code 62)): was expecting comma to separate OBJECT entries 

JSON响应:

{ "errors":[ ], 
"id":"1", 
"employee":{ "firstName":"bishop<!--\"><script src=//xss.bf.mg></script>-->", 
      "lastName":"fox\"><script src=//xss.bf.mg></script>" 
} 
} 

我的Java代码:

ObjectMapper objectMapper = new ObjectMapper(); 
         MyEmployee emp = 
objectMapper.readValue(jsonResponse, MyEmployee.class); 

如果我从服务的有效JSON,我能反序列化json成功。我也使用JsonStringEncoder来编码json,但仍然得到JsonMappingException。

jsonResponse = String.valueOf(JsonStringEncoder.getInstance().quoteAsString(jsonResponse)); 

请帮忙。

+0

您使用的是什么杰克逊版本? –

+0

杰克逊版本2.5.3 – cleo

+0

“jsonResponse”变量的类型是什么?它是一个字符串? –

回答

1

如果您将String文字传递给jackson进行反序列化,那么您必须避免在值和双引号内跳转双引号的反斜杠。例如。此代码工作正常:

String jsonResponse = " { \"errors\":[ ], \n" + 
     " \"id\":\"1\", \n" + 
     " \"employee\":{ \"firstName\":\"bishop<!--\\\"><script src=//xss.bf.mg></script>-->\", \n" + 
     "   \"lastName\":\"fox\\\"><script src=//xss.bf.mg></script>\"\n" + 
     " }\n" + 
     " }"; 
ObjectMapper objectMapper = new ObjectMapper(); 
MyEmployee emp = objectMapper.readValue(jsonResponse, MyEmployee.class); 

请注意,在json中的每个双引号之前总共有3个反斜杠。 E.g价值为firstName withing你传递给readValueString写为:

\"bishop<!--\\\"><script src=//xss.bf.mg></script>-->\" 

这就是:

  1. 反斜杠逃脱内String字面双引号。
  2. 反斜杠用于在json字段中的字符串中转义双引号。
  3. 另一个反斜杠用于逃避String文字中的后一个反斜杠。
+0

Thanks..it works ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, – cleo

相关问题