【问题标题】:Why does this JSON.parse return error: "unexpected token illegal"?为什么这个 JSON.parse 返回错误:“意外令牌非法”?
【发布时间】:2011-09-04 13:55:18
【问题描述】:

我正在使用 AJAX 请求。这是我第一次使用 JSON 或它的任何方法。 ajax 实用程序将参数作为我请求的文件的 responseText 或 responseXML 返回到 onreadystatechange 回调。使用简单的info.txtrequest.responseText 可以正常工作,但是当我尝试info.jsJSON.parse 时,当我多次检查我的语法是否正确时,它会返回“Unexpected token ILLEGAL”。这是 JSON:

JSON:

{
    first: 1,
    second: 2
}

【问题讨论】:

  • 首先,看看jQuery的AJAX调用方式,如果你在使用,为什么要编写自己的ajax函数?
  • 如果您将尝试解析的 JSON 字符串包含在问题中,这将有所帮助;)
  • JSON.parse() 应该是 JSON.parse(e)
  • 首先,扔掉你的 AJAX() 函数,改用 JQuery 的内置函数。你只是在重新发明轮子。其次,如果您在尝试读取您的 JSON 代码时遇到解析错误,那么我们可能需要查看您的 JSON 代码,以便我们了解解析错误是什么。

标签: javascript


【解决方案1】:

JSON.parse() 语法非常严格。键/值对应具有以下形式:

string:value

所以“first”和“second”应该是 JSON 对象中的字符串。 将您的 JSON 更改为以下代码,它应该是正确的

{
    "first": 1,
    "second": 2
}

【讨论】:

  • 谢谢。我的标识符没有用引号括起来,我得到了同样的错误。包裹它们修复它。
  • 您也可以跳过 JSON 解析并直接分配它。
【解决方案2】:

您似乎已经在成功回调中使用了 jQuery。 jQuery 也有执行 AJAX 请求的方法,例如 $.ajax 使您的 AJAX 自定义函数变得毫无用处。在您的情况下,您似乎在请求一个不同于 JSON 的 javascript 文件 (.js)。所以:

(function() {
    $.getScript('json.js', function(result) {
        // TODO: do something with the result
    });
})();

或者如果是 JSON:

(function() {
    $.getJSON('json.js', function(result) {
        // TODO: do something with the result
    });
})();

这就是说您仍然可以继续使用您的方法,但如果您的 json.js 不包含有效的 JSON 字符串,JSON.parse(e) 将始终失败。要验证它是否包含有效的 JSON 字符串,您可以在 http://jsonlint.com 上验证它

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多