2017-02-10 39 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