Grails-将JSON/Map对象传递给客户端

Grails-将JSON/Map对象传递给客户端,grails,gsp,Grails,Gsp,我试图将JSON对象保存到gsp页面中的数据-字段中 模拟控制器: def test(){ ['comments': ["1": 1, "3":40 ] ] } GSP(我也尝试了(注释为JSON)) 结果: <div class='findme' data-comments="{" 1":1,"3":40}"> 正如你所看到的,引用都是乱七八糟的。我尝试使用encodeAsHTML,但没有成功。我找到了几种方法 <div class='findme' d

我试图将JSON对象保存到gsp页面中的
数据-
字段中

模拟控制器:

def test(){
    ['comments': ["1": 1, "3":40 ] ] 
}
GSP(我也尝试了
(注释为JSON)


结果:

<div class='findme' data-comments="{" 1":1,"3":40}">


正如你所看到的,引用都是乱七八糟的。我尝试使用
encodeAsHTML
,但没有成功。

我找到了几种方法

<div class='findme' data-comments="${(new JSON(comments)).toString().encodeAsURL()}">

找到了另一种方法,但是如果你有任何东西里面有一个“的话,它会引起问题。我认为编码是一种方法

${(comments as JSON).toString().replace("\"", "'")}

我最近也遇到了这个问题,并提出了两个解决方案:

解决方案一:在模板中执行以下操作:

<div class="comments" data-comments="${comments.encodeAsJSON().encodeAsHTML()}">
<div class="comments" data-comments="${comments.encodeAsHTML()}">
在模板中执行以下操作:

<div class="comments" data-comments="${comments.encodeAsJSON().encodeAsHTML()}">
<div class="comments" data-comments="${comments.encodeAsHTML()}">

我找到了一个简单的方法。 首先,你要:

<div class="comments" data-comments="${comments.encodeAsJSON()}">

我没有试过,但我认为您也可以这样做:${(注释为JSON).encodeAsJavaScript()}我刚刚试过(在Grails 2.2.3中),实际上您可以使用${(注释为JSON).encodeAsJavaScript()}这将使用反斜杠转义单引号和双引号,因此您可以在单引号或双引号字符串中使用编码结果。(例如'comments':['aa':11,'bb':/two“two”clock/,'cc':33]将被编码为“{\'aa\':11,\'bb\':\'two\\\\\\'two\\\\\\'o'clock\',\'cc\':33}”)@SorinPostelnic u您应该作为附加答案发布。
$.parseJSON($('.comments').attr('data-comments'));
<div class="comments" data-comments="${comments.encodeAsJSON()}">
eval($('.comments').attr('data-comments'));