10

我假设杰克逊会在序列化过程中自动转义特殊字符,即将“/path/”序列化为“\/path\/”。情况似乎并非如此 - 至少在 1.6 中是开箱即用的:

@Test
public void testJacksonSerialize() throws Exception
{
    ObjectMapper om = new ObjectMapper();
    assertEquals("\\/path\\/", om.writeValueAsString("/path/"));
}

...失败 - 产生的输出是“/path/”。我必须编写自己的序列化程序还是有办法在杰克逊中启用特殊字符转义?

谢谢,-尼基塔

4

3 回答 3

5

杰克逊只逃避强制性的事情。“/”不是你必须逃避的东西,因此它不是。这根据 JSON 规范。

现在:如果您绝对想要转义,您可以使用方法来编写“原始”内容或值(在这种情况下,Jackson 不进行任何处理并将字符串转储到输出中)。

但是你真的需要这样的逃避吗?我知道有些生成器确实会转义它(出于我不知道的原因),但没有解析器期望它,所以不转义斜杠应该没问题。这与显然必须转义的反斜杠不同。

于 2011-01-13T00:33:06.797 回答
1

斜杠“/”在 JSON 中不需要转义,因为它没有特殊含义。然而 JSON允许对斜线进行转义,原因如下。

如果将 JSON 文本直接转储到 HTML 文本的 <SCRIPT> 元素中,则必须确保文本中不出现两个字符序列“</”。该序列将根据 HTML 规则立即结束脚本元素。但是如果 JSON 文本读作“<\/”,这对 JSON 具有相同的含义,但不会干扰 HTML 规则。因此,当且仅当斜线前面有一个小于号时,一些 JSON 生成器才会转义斜线。

话虽如此,我不知道您的问题的直接答案(如何绝对在杰克逊中逃脱)。

于 2011-05-09T14:09:51.910 回答
0

对于某些浏览器的 Tooltip,换行符将不起作用。不工作 \r\n 不工作或\n 不工作

使用双反斜杠跳过字符

解决方案:使用 '\\r\\n' 代替 '\r\n' ,
它将解决您的问题。

于 2012-04-19T09:00:26.697 回答