2017-02-10 20 views
1

私のサービスから取得するJSONを解析できません。私はジャクソンを解析するためにJackson APIを使用しています。私はJsonParseExceptionを取得しています:jsonResponseを使用したJsonParseException

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

jackson version 2.5.3 – cleo

+0

'jsonResponse'変数の種類は何ですか?それは文字列ですか? –

答えて

1

リテラルを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); 

注3つのバックスラッシュの合計は、JSONの値内の各二重引用符の前に存在していること。例えばあなたがreadValueに渡すStringをwithing firstNameの値は以下のように書かれている:

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

だこと:

  1. Stringリテラル内の二重引用符をエスケープするバックスラッシュ。
  2. jsonフィールドの文字列内の二重引用符をエスケープするバックスラッシュ。
  3. Stringリテラル内に後者のバックスラッシュをエスケープする別のバックスラッシュ。
+0

ありがとうございました。これを行う別の方法が見つかりました。カスタムJsonDeserializerを作成し、それを解決しました。:) – cleo

関連する問題