我不断收到“Uncaught SyntaxError: Unexpected token o”

IT技术 javascript jquery json
2021-02-07 14:19:13

我正在尝试学习一些 html/css/javascript,所以我正在为自己编写一个教学项目。

这个想法是在 json 文件中包含一些词汇,然后将其加载到表中。我设法加载文件并打印出其中一个值,之后我开始编写代码以将值加载到表中。

这样做之后,我开始遇到错误,所以我删除了我编写的所有代码,只留下一行(以前工作过的同一行)……只有错误仍然存​​在。

错误如下:

Uncaught SyntaxError: Unexpected token o
(anonymous function)script.js:10
jQuery.Callbacks.firejquery-1.7.js:1064
jQuery.Callbacks.self.fireWithjquery-1.7.js:1182
donejquery-1.7.js:7454
jQuery.ajaxTransport.send.callback

我的 javascript 代码包含在一个单独的文件中,就是这样:

function loadPageIntoDiv(){
    document.getElementById("wokabWeeks").style.display = "block";
}

function loadWokab(){
    //also tried getJSON which threw the same error
    jQuery.get('wokab.json', function(data) {
        var glacier = JSON.parse(data);
    });
}

我的 JSON 文件现在只有以下内容:

[
    {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    },

    {
        "english": "glasses",
        "kana": "megane",
        "kanji": "M"
    }
]

现在错误报告在第 11 行,即该var glacier = JSON.parse(data);行。

当我删除 json 文件时,我收到错误消息:“GET http://.../wokab.json 404 (Not Found)”所以我知道它正在加载它(或至少尝试加载)。

6个回答

看起来 jQuery 需要猜测数据类型。即使您没有调用 getJSON(),它也会进行 JSON 解析——然后当您尝试在对象上调用 JSON.parse() 时,您会收到错误消息。

进一步的解释可以在Aditya Mittal 的回答中找到

啊哈,所以 data[0].english 返回“bag”。看起来我根本不需要解析 json 文件。
2021-03-17 14:19:13
这很有趣.. 我猜 jquery 猜测数据类型并假设它是 json。我认为 getJson 也会起作用,对吗?
2021-03-31 14:19:13
小提示:如果您JSON.parse是一个对象,则抛出“意外标记 o”仅仅是因为它试图解析obj_to_parse.toString(),即[object Object]. 尝试JSON.parse('[object Object]');;)
2021-04-03 14:19:13
jQuery 不会猜测如果您不使用dataType(任何原因)覆盖它,它会使用Content-type响应HTTP 标头来确定它是什么类型的数据,并解析它是否是 jQuery 识别的数据。
2021-04-08 14:19:13
它也发生在我身上,我认为我的错误是我试图将已经是 JSON 对象的东西解析为 JSON
2021-04-09 14:19:13

问题很简单

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});

你解析它两次。get使用dataType='json',所以数据已经是 json 格式。使用$.ajax({ dataType: 'json' ...专门设置返回的数据类型!

基本上如果响应头是 text/html 你需要解析,如果响应头是 application/json 它已经为你解析了。

来自 jquery 成功处理程序的文本/html 响应的解析数据:

var parsed = JSON.parse(data);

来自应用程序/json 响应的 jquery 成功处理程序的解析数据:

var parsed = data;
请注意投票否决的任何人,上面接受的答案包含此答案的完全副本。现在从接受的答案中添加链接。
2021-04-02 14:19:13

另一个Unexpected token错误提示javascript 对象和 json 之间有两个主要区别:

  1. json 数据必须始终用双引号引用。
  2. 键必须被引用

正确的 JSON

 {
    "english": "bag",
    "kana": "kaban",
    "kanji": "K"
}

错误 JSON 1

 {
    'english': 'bag',
    'kana': 'kaban',
    'kanji': 'K'
 }

错误 JSON 2

 {
    english: "bag",
    kana: "kaban",
    kanji: "K"
}

评论

这不是该问题的直接答案。但这是Unexpected token错误的答案因此,它可能会帮助其他遇到该问题的人。

简单的响应已经被解析,你不需要再次解析它。如果您再次解析它,它将为您提供“意外令牌 o”,但是您必须在请求中指定数据类型为类型dataType='json'