无法使用杰克逊的objectMapper解析json,其中json值包含\\

时间:2019-05-01 17:48:10

标签: java jackson-databind

我正在使用杰克逊的ObjectMapper类将json字符串反序列化为纯java对象。 ObjectMapper抛出异常

我要反序列化的json字符串

String input="{\"id\":\"30329\",\"appId\":\"3301\",\"nodeId\":1556537156187,\"data\":\"select id,obt_marks,'\\\\m' as dummy from ltc_test_1\"}";
数据键的

值包含\,这是导致问题的原因,是其逃避此错误的方法。我想要这个值像我的POJO中一样 它可以通过用\\替换\的出现来工作,因此字符串看起来像
\“ data \”:\“从ltc_test_1 \”中选择id,obt_marks,'\\\\ m'作为虚拟对象

  

问题:如何使用java来实现这一点?objectMapper或Jackson中是否有任何设置可以解决此问题?

下面是pojo,我将在反序列化后得到

public class WorkflowProcessInfo {
    private Long id;
    private Long appId;
    private Long nodeId;
    private String data;
}

////Code I am using for deserialization 
ObjectMapper mapper = new ObjectMapper();
        mapper.configure(Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, false);

        mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
        mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
                true);

        mapper.setSerializationInclusion(Include.NON_NULL);

        try{
    return mapper.readValue(inputJson, WorkflowProcessInfo.class);
}catch(Exception e){
syso(e.getMessage())}

我期望WorkflowProcessInfo对象具有json含义中的值,pojo的data属性应如下所示

WorkflowProcessInfo.data="select id,obt_marks,'\\m' as dummy from ltc_test_1"

相反,我低于例外情况

  

com.fasterxml.jackson.core.JsonParseException:无法识别的字符   在[Source:java.io.StringReader@1ea9f6af;中转义'm'(代码109);   行:1,列:84]

0 个答案:

没有答案