Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JsonParseException:从Oracle 11g读取JSON时出现意外字符_Java_Json_Oracle11g_Jackson_Deserialization - Fatal编程技术网

Java JsonParseException:从Oracle 11g读取JSON时出现意外字符

Java JsonParseException:从Oracle 11g读取JSON时出现意外字符,java,json,oracle11g,jackson,deserialization,Java,Json,Oracle11g,Jackson,Deserialization,我们有一些数据作为序列化JSON保存在Oracle11g的CLOB列中。稍后,该数据将被读回并反序列化。但是在某些情况下,反序列化失败(使用Jackson) 问题是,它试图反序列化的JSON中没有“w”字符。我怀疑这可能是一个字符编码问题。。。Oracle 11g服务器正在使用AL32UTF8 这是执行序列化的代码: public String serializeEMVData(Map<String, String> emvData) { ObjectMapper obje

我们有一些数据作为序列化JSON保存在Oracle11g的CLOB列中。稍后,该数据将被读回并反序列化。但是在某些情况下,反序列化失败(使用Jackson)

问题是,它试图反序列化的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;
}
公共字符串序列化emvData(映射emvData){
ObjectMapper ObjectMapper=新的ObjectMapper();
如果(emvData!=null){
试一试{
返回objectMapper.writeValueAsString(emvData);
}捕获(JsonProcessingException ex){
logger.error(“未能将EMV数据序列化为JSON”,ex);
}
}
返回null;
}
这是进行反序列化的代码

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;
        }
    }
公共静态映射反序列化EMVDATA(字符串序列化DEMVDATA){
HashMap emvData=null;
if(serializedEmvData!=null){
ObjectMapper ObjectMapper=新的ObjectMapper();
试一试{
emvData=objectMapper.readValue(serializedEmvData,HashMap.class);
}捕获(IOE异常){
logger.error(“未能将emvData JSON反序列化为HashMap.emvData->”+serializedEmvData.toString(),e);
}
}
如果(emvData!=null){
返回新树映射(emvData);
}否则{
返回null;
}
}

如何告诉Java字符集是AL32UTF8,或者我需要在查询中转换它……

是否正确地将CLOB转换为字符串?
看起来您正在尝试转换CLOB.toString()(即“weblogic.jdbc.wrapper.CLOB\u oracle\u sql_CLOB@1e52cd)转换为java对象。

是否正确地将CLOB转换为字符串? 看起来您正在尝试转换CLOB.toString()(即“weblogic.jdbc.wrapper.CLOB\u oracle\u sql_CLOB@1e52cd)到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;
        }
    }