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;
}
}
をやってコードでありますクエリ内で変換するには....