2017-03-03 5 views
1

シリアライズされたJSONとしてOracle 11gのCLOB列に保存されているデータがあります。その後、このデータは読み出され、逆シリアル化されます。しかし、場合によっては、デシリアライズが失敗しています(Jacksonを使用)。Java JsonParseException:予期しない文字Oracle 11gからJSONを読み取る

Failed to deserialize emvData JSON into HashMap. EMVData -> [email protected] 
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('w' (code 119)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 

デシリアライズしようとしたJSONのどこにも「w」文字がありません。私は文字エンコードの問題かもしれないと思っています... Oracle 11gサーバーはAL32UTF8を使用しています。

これは、シリアル化を行っているコードです:

public String serializeEMVData(Map<String, String> emvData) { 

    ObjectMapper objectMapper = new ObjectMapper(); 
    if (emvData != null) { 
     try { 
      return objectMapper.writeValueAsString(emvData); 
     } catch (JsonProcessingException ex) { 
      logger.error("Failed to serialize EMV data as JSON", ex); 
     } 
    } 
    return null; 
} 

そしてこれは、デシリアライゼーション

私は文字セットがAL32UTF8でのJavaを伝えることができるか、私が必要とするにはどうすればよい
public static Map<String, String> deserializeEMVData(String serializedEmvData) { 


     HashMap<String, String> emvData = null; 
     if (serializedEmvData != null) { 
      ObjectMapper objectMapper = new ObjectMapper(); 
      try { 
       emvData = objectMapper.readValue(serializedEmvData, HashMap.class); 
      } catch (IOException e) { 
       logger.error("Failed to deserialize emvData JSON into HashMap. EMVData -> " + serializedEmvData.toString(), e); 
      } 
     } 
     if (emvData != null) { 
      return new TreeMap<String, String>(emvData); 
     } else { 
      return null; 
     } 
    } 

をやってコードでありますクエリ内で変換するには....

答えて

0

CLOBをStringに正しく変換していますか? CLOB.toString()(つまり、「[email protected]」)をJavaオブジェクトに変換しようとしているようです。

関連する問題