【问题标题】:How to escape HTML in JSON如何在 JSON 中转义 HTML
【发布时间】:2015-03-28 18:54:56
【问题描述】:

我想知道如何在 JSON 中转义 HTML 代码?我使用 Jackson 作为我的 JSON 映射器。

在我的内容中,我有各种字符:标签、单引号、双引号、换行符 (\n)、制表符等。我尝试使用 CharacterEscapes 类,但没有结果。

使用 CharacterEscapes 后,我的 JSON 响应崩溃了。我试图手动转义它,但也没有任何结果。

所以问题是,假设我们有:

 <p>Some text</p>\n<p>"SomeText"</p>

如何将它作为 JSON 对象的值发送回浏览器?

更新: 输入是:

{
    "code": {
    "num": 12
},
    "obj": {
        "label": "somelabel",
        "order": 1
    },
    "det": {
        "part": "1",
        "cont": true
    },
     "html": "<p>Mine text</p>"
}

输出:

{
    "code": {
    "num": 12
},
"obj": {
    "label": "somelabel",
    "order": 1
},
"det": {
    "part":"1",
    "cont": true
},
"html":{"code": {
    "num": 12
    },
    "obj": {
        "label": "somelabel",
        "order": 1
    },
    "det": {
    "part":"
    }

【问题讨论】:

  • 这有帮助吗? cowtowncoder.com/blog/archives/2012/08/entry_476.html 尽管除了 \b、\f、\n、\r、\t、\" 和 \\ 之外,您可能不需要转义任何内容。请考虑这个 stackoverflow.com/questions/3020094/… 和这个 stackoverflow.com/questions/19176024/… 。希望这会有所帮助。
  • 我看过那篇文章,我有类似的代码,但没有帮助。顺便提一句。我刚刚看到我的示例中没有显示一些标签。我将更新示例文本。
  • 我不明白这个问题。 HTML 只是文本。您可能将其存储为String。 Jackson 可以在String 中转义任何必要的字符。
  • @SotiriosDelimanolis 我正在发送响应:mapper.writeValue(response.getWriter(), myObjectWithHtmlProperty) 在浏览器中我看到 json,它看起来像这样:{"key":"value" , "key":"value", "myHtmlKey":{"key":"value", "key":"value"} HTML 代码从头替换为 JSON 对象
  • 我还是不明白。请发布一个完整且可重复的示例。输入是什么?输出是什么?预期的输出是什么?为什么?

标签: java json jackson html-escape-characters


【解决方案1】:

目前我找到了以下解决方案: 我已将 CharacterEscapes 添加到 ObjectMapper 类的 JsonFactory 中。 我也改变了将 JSON 写入响应的方式。 而不是

objectMapper.writeValue(response.getWriter(), myObject)

我正在这样做:

PrintWriter writer = response.getWriter();
writer.print(String.valueOf(objectMapper.writeValueAsBytes(myObject));
writer.flush();

它可以按我的意愿工作。

【讨论】:

    【解决方案2】:

    我建议使用以下任何一种。

    1.您可以为此目的使用 GSON 库。

        Gson gson = new GsonBuilder().disableHtmlEscaping().create();
    

    2.使用Apache commons StringEscapeUtils.escapeHtml("JSON string")

    【讨论】:

    • 我正在使用 Jackson,目前我不想切换到 Gson。在杰克逊一定有办法做到这一点。关于apache,我有最新版本的apache,没有“escapeHtml”这样的方法。它已被删除,我不确定替换的是什么。
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2013-02-24
    • 2022-01-13
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多