【发布时间】:2016-04-15 12:05:54
【问题描述】:
在某些情况下使用 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\"}
当我将 escapedString 传递给 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 字符串中不应有转义符。打印您在第一行中的
jsonString,您会看到它在内部没有任何转义。 -
该问题的描述非常混乱,甚至无法编译,并且转义会神奇地将年龄从 40 更改为 33。请检查并显示真实代码。但我只能假设您引用了错误的内容。
-
@kan 拼写错误。现在正在更新它,请看看。
-
你不应该转义 json 字符串本身,你只需要转义将作为 json 格式文档的值放置的原始字符串。
-
根据问题的最后一行,您需要转义“东西”,而不是 JSON。