-1

我有这个字符串,我从 grails 控制器传递到 JS,我试图在 jquery 中对字符串运行 $.parseJSON() 方法,但它失败了。当我在 JSON lint 中对其进行测试时,它的格式不正确,但我不知道为什么。

  private String copydec = """   {
                   "header" : "",
                    "copy" : "<p style='font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;'><b>Title for some copy</b></p>
                    <p><span style='font-size: 12px;'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p>
                    <p><span style='font-size: 12px;'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p>
                    <p><span style='font-size: 12px;'></span></p>
                    <p style='font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;'></p>
    <p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p>",
                    "checkboxLabel" : "<p>What can I help you with</p>
                    <p></p>"
    }               """

尝试按照评论中的建议将其全部添加到一行中,没有换行符,但仍然格式错误。

        {
           "header" : "","terms" : "<p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"><b>Recurring Payments Authorization</b></p><p><span style="font-size: 12px;">Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style="font-size: 12px;">Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style="font-size: 12px;"></span></p><p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p><p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p>","checkboxLabel" : "<p>I accept these terms and conditions.</p><p></p>","digitalSignatureDescription" : "Digital Signature","digitalSignatureDetails" : "Complete digital phone authorization description consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore Description consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore","acceptTermsDesc" : "You must accept these Terms and Conditions to continue with your order.","timestamp" : "07/30/2013 12:58:39","version" : "","signatureDateLabel" : "Date","fullNameLabel" : "Full Name","birthdateLabel" : "Date of Birth","digitalSignatureID" : "BILLING","signatureType" : "TANDC","signatureMethod" : "SIGNATURE"
        }  

更新: 基于 dmahapatro 的回答,他在 JS fiddle 中得到了它的工作。我将 grails 控制器中的代码更改为如下所示。

private String copydec = """
'{"header":"","copy":"<p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'><b>Title for some copy</b></p><p><span style=\'font-size: 12px;\'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style=\'font-size: 12px;\'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style=\'font-size: 12px;\'></span></p><p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'></p><p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'></p>","checkboxLabel" : "<p>What can I help you with</p><p></p>"}'
"""

在我的 index.gsp 文件中,我将控制器变量转储到隐藏的输入字段中。

 <input type="hidden" id="copy" value='${bean.copydec}' />

然后从我的 JS 文件中访问它。

   var str = $('#termsAndConditions').val();
   console.log("str = ", str);
   var termsJSON = $.parseJSON( str );

错误:未捕获的语法错误:输入意外结束

4

2 回答 2

0

它需要像这样格式化为一行......或者至少在文本中包含换行符......

{
"header": "",
"copy": "Title for some copy Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.",
"checkboxLabel": "What can I help you with"
 }
于 2013-07-31T15:32:57.123 回答
0

当或从 html 内容中转义时,我可以摆弄它。'"

基于 OP 对问题的更新:在构建 Json 字符串时必须明智地使用引号。在这种情况下:

//Make sure you remove the single quote if you use triple quotes for multiline
private String copydec = """
   Your Json String
"""

或者

//Assign the json string in one line
private String copydec = 'Your json String'

或者

//Use three single quotes for multiple
private String copydec = '''
   Your json String
'''

这行不通:

//Note the single quote after triple quotes which is the way you are using
private String copydec = """
   'Your json String'
"""

这个例子说明了同样的情况。

于 2013-07-31T17:52:33.370 回答