【问题标题】:error showing malformed JSON in jquery在 jquery 中显示格式错误的 JSON 的错误
【发布时间】:2013-07-31 15:28:23
【问题描述】:

我有这个字符串,我从 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>"
    }               """

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

        {
           "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 );

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

【问题讨论】:

  • 有几个错误,粘贴到jsonlint.com
  • 代码是什么样的?你从哪里得到 JSON?
  • 代码来自 grails 控制器中的变量。私有字符串 copydec。它以字符串的形式出现。但是当我尝试将它解析为 JS 中的 JSON 时,我得到了一个错误。
  • 另外,您在 json 字符串属性中使用了双引号。 `

    Johan 不确定您的意思我尝试将所有引号更改为单引号并出现其他错误。你能给我一个我正在使用的例子吗?

标签: jquery json grails


【解决方案1】:

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

{
"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"
 }

【讨论】:

  • 我之前在 JSON 中使用过 html 标签,没有任何问题。您刚刚删除了所有标签。
  • 他试图告诉你,你的 JSON 结构中不能有实际的 LINE BREAKS。
  • 好的,但我尝试将所有 JSON 放在一行中并保留 html 标签,但我仍然得到格式错误的 JSON。
  • 你确定引号被正确转义了吗?
  • 当你说逃跑了?我将如何确保这一点。
【解决方案2】:

'" 从html 内容中转义时,我可以fiddle 它。

根据 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'
"""

This example 说明相同。

【讨论】:

  • 好吧,如果我只是将它作为变量直接添加到 JS 文件中,这是我无法做到的。当我将它作为字符串添加到我的 grails 控制器然后将其转储到隐藏的输入字段中时,我收到此错误。未捕获的语法错误:输入意外结束
  • @Chapsterj 这个答案对你有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2014-03-30
  • 2016-10-15
  • 2023-04-01
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多