我有以下代码:
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
和所有;我只是这样做是为了解决某些不需要在这里指定的问题。)
答案 0 :(得分:4)
您在上一个条目的末尾有一个新行。这意味着当您拆分新行时,您有一个空字符串作为数组中的最后一项。空字符串无效JSON。
答案 1 :(得分:1)
for (i = 0; i < linkdata.length - 1; i++)
在for循环条件中添加-1。用换行符拆分将创建空数组。所以在运行最后一次循环之后它会出错。我们无法解析空。否则删除default_links中的最后一个换行符