【问题标题】:Does Jackson JSON do special char escaping?Jackson JSON 是否进行特殊字符转义?
【发布时间】:2011-01-12 19:37:38
【问题描述】:

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

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

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

谢谢, -尼基塔

【问题讨论】:

  • virgule 是 JSON 字符串中的特殊字符?
  • 其实“/”是否应该转义是更好的问题。通过查看这个 Twillio 文档,我认为是这样的:twilio.com/docs/api/2010-04-01/rest/… 但 JSLint 并没有抱怨。为什么 Twilio 在 JSON 响应中转义“/”?
  • 击败我。我找不到任何说 / 需要转义的内容。

标签: json jackson


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    如果将 JSON 文本直接转储到 HTML 文本的

    话虽如此,我不知道您的问题的直接答案(如何绝对在杰克逊进行转义)。

    【讨论】:

      【解决方案3】:

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

      使用双反斜杠跳过字符

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        • 2015-01-02
        • 1970-01-01
        相关资源
        最近更新 更多