2011-01-12 12 views
9

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

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

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

感谢, -nikita

+0

virgule是JSON字符串中的特殊字符吗? – Joey 2011-01-12 19:41:34

回答

4

杰克逊只逃脱强制性的东西。 “/”不是你必须逃脱的东西,因此它不是。这按照JSON规范。现在:如果你绝对想要转义,你可以使用方法来编写“原始”内容或值(在这种情况下,Jackson不会处理任何内容并在输出中转储字符串)。

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

1

斜杠“/”不需要在JSON中转义,因为它没有特殊含义。但由于以下原因,JSON 允许斜线被转义。

如果您将JSON文本正确转储到HTML文本的< SCRIPT>元素中,则必须确保文本中没有出现双字符序列“< /”。该序列将根据HTML规则立即结束脚本元素。但是,如果JSON文本显示“< \ /”,则这与JSON具有相同的含义,而不会干扰HTML规则。因此,有些JSON生成器会在斜杠前面加上一个小于号的符号。

这就是说,我不知道你的问题的直接答案(如何绝对在杰克逊逃避)。

0

如果使用某些浏览器的工具提示,新行字符将不起作用。 不工作\ r \ n无法工作或\ N不工作

使用双反斜线跳过字符

解决方案:代替 '\ r \ n' 使用 '\\ \\ [R N',
它会解决你的问题。