【问题标题】:JSP attribute JSON object is dropping escape characters in JavascriptJSP 属性 JSON 对象在 Javascript 中丢弃转义字符
【发布时间】:2018-05-03 19:56:51
【问题描述】:

我有一个服务器端控制器,它正在添加一个属性,该属性是一个使用 Jackson 转换为 JSON 的 Java 对象:

ObjectMapper mapper = new ObjectMapper();
model.addAttribute("commentObj", mapper.writeValueAsString(commentObject);

我的commentObject 有一个字段“cmets”,其中包含JSON 需要转义的引号(“)。当我从commentObject 的JSP 中进行简单打印时,一切看起来都不错:

[{"commentId":123,"comments": "this \"test\" is here"}]

如您所见,引号已正确转义 (\")。

我的问题来自这个页面上的 javascript,它也需要访问这个对象。所以当我运行以下命令时:

<script>
    var test = ${commentObj};
</script>

如果我看一下“test”变量,cmets 字段现在如下所示:

"this "test" is here" 
vs. 
"this \"test\" is here"

这会导致问题,因为 JSON.parse() 将在“测试”上抛出错误,因为它不再是正确格式的 JSON。

所以我的问题是,如何在保留转义字符的同时设法将我的 commentObj 转换为 javascript 对象,以便我可以正确地 JSON.parse 它?

【问题讨论】:

    标签: javascript json jsp escaping


    【解决方案1】:

    对不起,写在漫长的一天生病的时候,现在才意识到'test' var 最终是一个完全形成的 JS 对象。所以我可以使用它。

    也就是说,我仍然想知道这是怎么回事?在我看来,它应该以我需要调用 JSON.parse 的 JSON 字符串的形式出现。有人解释一下吗?

    【讨论】:

    • 在您将commentObj 放入模型时,它已经被序列化为 JSON 字符串。在您的 JSP 的脚本标记中,您将它分配给一个变量。就好像您已将文字 JavaScript 数组分配给 var test。换句话说,它的 javascript 类型是对象,而不是字符串。如果您写了var test = '${commentObj}';,那么它将是一个字符串。当然,在 Java 的服务器端,它是一个字符串。但是您将对象文字分配给 javascript 变量。很高兴您不必解析字符串。
    • 感谢您的回复。我可以理解它是如何在 JS 端被视为对象而不是文字字符串(如果我不将其括在引号中),但我仍然不明白 JS 如何知道在没有明确说明的情况下将其从 JSON 解析为对象.
    • 这就是javascript does。如果您查看页面的源代码,您将看不到字符串,您将看到var test = [{"commentId":123,"comments": "this \"test\" is here"}];。它是用于编写 html 文档的 java 字符串的值,其中包括您的脚本标记和变量值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2016-12-30
    • 2012-11-22
    • 2020-01-30
    相关资源
    最近更新 更多