首页 > 解决方案 > 无法使用json值包含\\的jackson的objectMapper解析json

问题描述

我正在使用杰克逊的 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 \"

问题: 如何使用 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 的数据属性应如下所示

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

相反,我得到了例外

com.fasterxml.jackson.core.JsonParseException:在 [来源:java.io.StringReader@1ea9f6af; 行:1,列:84]

标签: javajackson-databind

解决方案


推荐阅读