java - jackson 中的意外字符 ('\'(代码 92))

标签 java json jackson

在某些情况下,我在使用 Jackson 解析 JSON 字符串时遇到问题。

String jsonString = "{\"Age\":40, \"Name\":\"Sample User\"}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString,JsonNode.class);

System.out.println(jsonstirng)
{"Age":40, "Name":"Sample User"}

当我传递 jsonString 值时,上面的代码运行良好。

在某些情况下,我需要转义无效的字符串字符,例如 ",'

为了转义,我正在使用 Apache StringEscapeUtils

String escapedString = StringEscapeUtils.escapeJson(jsonStirng);

转义字符串输出

{\"Age\":40,\"Name\":\"Sample User\"}

当我将转义字符串传递给 mapper 时,它会抛出一个意外的字符异常。

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(escapedString,JsonNode.class);

异常

Unexpected character ('\' (code 92)): was expecting double-quote to start field name

实际上,我正在解析 ModSecurity 审计日志。审计日志的响应主体包含(HTML、CSS、javascript 等)内容,这就是为什么我需要转义 JSON 字符串,否则它会破坏 JSON 格式。

最佳答案

转义字符串的目的是使其无法作为 JSON 的一部分进行解析。

在您的原因中,您将所有 " 替换为 \" 以便它可以在 String 值中使用,并且解析器不会将其视为JSON.

例如这只是一个字段和值;

"myJson": "{\"Age\":40,\"Name\":\"Sample User\"}"

您不能执行以下操作,这就是您需要此方法的原因。它无法区分开始/结束字符串的 " 和字符串内部的 "

"myJson": "{"Age":40,"Name":"Sample User"}"

如果您随后尝试解析这个转义字符串,它应该无法解析它。


编辑:这是一个例子

String text = "{\"Age\":40,\"Name\":\"Sample User\"}";
String escaped = StringEscapeUtils.escapeJson(text);
System.out.println("escaped= " + escaped);
String unescaped = StringEscapeUtils.unescapeJson(escaped);
System.out.println("unescaped= " + unescaped);

打印

escaped= {\"Age\":40,\"Name\":\"Sample User\"}
unescaped= {"Age":40,"Name":"Sample User"}

你可以看到转义的字符串有 \" 而未转义的字符串没有。如果你仍然看到 \ 我会假设字符串没有被未转义。

关于java - jackson 中的意外字符 ('\'(代码 92)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36646693/

相关文章:

java - 使用 Jackson 将数组从 javascript 传递到 java servlet

java - 在 spring 中调用 jackson 之前获取 http post 请求正文

java - 如何从 HttpURLConnection POST 获取响应

javax.persistence.* 来源,在哪里?

java - 规范中是否可以使用非实体字段?

带有对象数据的 Javascript 2D 数组通过 $.Ajax() 转换为 PHP $_POST 的 vail JSON 字符串

java - 如何在 Spring Boot 中自定义 JSON 响应?

java - 队列实现中的出队和入队方法

python - Python无法打开JSON文件,给出JSONDecodeError

java - 如何在多个文件夹中保存字符串 JSON 元素