错误在jquery中显示格式错误的JSON

时间:2013-07-31 15:28:23

标签: jquery json grails

我有这个字符串,我从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小提琴中工作的地方。我在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 );

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

2 个答案:

答案 0 :(得分: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"
 }

答案 1 :(得分:0)

从html内容中转出'"时,我可以fiddle

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

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

OR

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

OR

//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'
"""

This example说明了相同的内容。