JSON.parse抱怨"意外的数据结束"

时间:2014-05-22 11:47:24

标签: javascript json

我有以下代码:

var default_links = 
'{ "name" : "Google",    "url": "https://encrypted.google.com/", "fav_url": "https://encrypted.google.com/favicon.ico" }\n'+
'{ "name" : "Yahoo",     "url": "http://www.yahoo.com/",         "fav_url": "http://www.yahoo.com/favicon.ico" }\n'+
'{ "name" : "GMail",     "url": "https://mail.google.com/",      "fav_url": "https://mail.google.com/favicon.ico" }\n'+
'{ "name" : "Twitter",   "url": "https://www.twitter.com/",      "fav_url": "https://www.twitter.com/favicon.ico" }\n'+
'{ "name" : "Facebook",  "url": "https://www.facebook.com/",     "fav_url": "https://www.facebook.com/favicon.ico" }\n'+
'{ "name" : "Wikipedia", "url": "https://en.wikipedia.org/",     "fav_url": "http://en.wikipedia.com/favicon.ico" }\n';

function write_links()
{
    var linkdata = default_links.split("\n");
    for (i = 0; i < linkdata.length; i++)
    {
        var link = JSON.parse(linkdata[i]);
        document.getElementById("useful_links").innerHTML += '<a href=\"' + link.url + '"><img src="' + link.fav_url + '">' + link.name + '</a><br>';
    }
}

所有线条都经过完美解析;但最后,我发现了以下内容:

[xx:xx:xx.xxx] SyntaxError: JSON.parse: unexpected end of data @ http://127.0.0.1/homepage.html:33

是什么导致这种情况?

(我知道糟糕的设计:分裂\n和所有;我只是这样做是为了解决某些不需要在这里指定的问题。)

2 个答案:

答案 0 :(得分:4)

您在上一个条目的末尾有一个新行。这意味着当您拆分新行时,您有一个空字符串作为数组中的最后一项。空字符串无效JSON。

答案 1 :(得分:1)

 for (i = 0; i < linkdata.length - 1; i++) 

在for循环条件中添加-1。用换行符拆分将创建空数组。所以在运行最后一次循环之后它会出错。我们无法解析空。否则删除default_links中的最后一个换行符