2014-05-22 1 views
0

뿌려 나는 다음과 같은 코드가 있습니다JSON.parse는 "데이터의 예상치 못한 말"

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 모든 이상 분할, 난 그냥 여기에 지정 될 필요가 특정 문제에 대한 해결 방법으로 것을하고 있어요.)

답변

4

당신은 새로운 라인에서이 마지막 엔트리 끝. 즉, 새 줄을 나누면 배열의 마지막 항목으로 빈 문자열이 생깁니다. 빈 문자열이 유효한 JSON이 아닙니다.

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

for-loop 조건에 -1을 더합니다. newline을 사용하여 split하면 빈 배열이 생성됩니다. 그래서 실행 후 마지막으로 오류를 통해 루프. 우리는 비어있는 구문 분석을 할 수 없습니다. 그렇지 않으면 default_links에서 마지막 줄 바꿈 문자열을 제거하십시오.

+0

그런 다음 색인'-1'에서 항목을 구문 분석하려고 시도합니다 – Quentin