JSP属性JSON对象正在删除Javascript中的转义字符

JSP属性JSON对象正在删除Javascript中的转义字符,javascript,json,jsp,escaping,Javascript,Json,Jsp,Escaping,我有一个服务器端控制器,它正在添加一个属性,该属性是使用Jackson转换为JSON的Java对象: ObjectMapper mapper = new ObjectMapper(); model.addAttribute("commentObj", mapper.writeValueAsString(commentObject); 我的commentObject有一个字段“comments”,其中包含JSON需要转义的引号(“)。当我从commentObject的JSP进行简单打印时,一切看

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

ObjectMapper mapper = new ObjectMapper();
model.addAttribute("commentObj", mapper.writeValueAsString(commentObject);
我的commentObject有一个字段“comments”,其中包含JSON需要转义的引号(“)。当我从commentObject的JSP进行简单打印时,一切看起来都很好:

[{"commentId":123,"comments": "this \"test\" is here"}]
如您所见,引号正确转义(\“”)

我的问题是这个页面上的javascript也需要访问这个对象。因此,当我运行以下程序时:

<script>
    var test = ${commentObj};
</script>
这会导致一个问题,因为JSON.parse()将在“test”上抛出一个错误,因为它不再是正确格式的JSON


因此,我的问题是,如何在保留转义字符的同时将我的commentObj放入javascript对象中,以便正确解析它?

对不起,这是在漫长的一天病假结束后写的,现在才意识到“test”var最终是一个完全格式的JS对象。所以我可以用这个


尽管如此,我仍然有一个问题,那就是这是如何发生的?在我看来,它应该是一个JSON字符串,我需要调用它的JSON.parse。有人有解释吗?

在您将
commentObj
放入模型时,它已经被序列化为JSON字符串。在JSP的脚本标记中,将其分配给变量。这就好像您将一个文本javascript数组分配给了
var test
。换句话说,它的javascript类型是object,而不是string。如果您编写了
var test='${commentObj}'那么它将是一个字符串。当然,在Java的服务器端,它是一个字符串。但您正在将一个对象文本分配给一个javascript变量。很高兴您不必解析字符串。谢谢您的回复。我可以理解在JS端它是如何被当作一个对象来对待的,而不是一个文本字符串(如果我没有用引号括起来的话),但我仍然不理解JS如何知道在没有明确指令的情况下将它从JSON解析为一个对象。这就是问题所在。如果您查看页面的源代码,您将不会看到字符串,您将看到
var test=[{“commentId”:123,“comments”:“this\“test\”在这里”}。它是用于编写html文档的java字符串的值,其中包括脚本标记和变量值。
"this "test" is here" 
vs. 
"this \"test\" is here"