2013-04-18 2 views
0

이 코드를 사용하여 크롬 콘솔에서 나는 오류를구문 에러 : 예기치 않은 토큰 Q

JSON.parse 사용하여 객체에 입력을 변환하는 것입니다 내가 필요
SyntaxError: Unexpected token Q 

()를 얻는다.

이 오류를 해결하는 방법에 대한 아이디어가 있으십니까?

var input = 'QR|BEGIN:VEVENT\r\nSUMMARY:Event test 18 APrile\r\nDTSTART:20130418T085900Z\r\nDTEND:20130418T105900Z\r\nLOCATION:Class 18\r\nDESCRIPTION:Desc 18 APrile\r\nEND:VEVENT'; 

    var output = input.split(/\r\n/); 
    output = "{" + output + "}"; 
    alert(output); 

    var outputJson = JSON.parse(output); 
    console.log(outputJson); 
+7

JSON이 전혀 없습니다. –

+0

당신의 입력 문자열은'{}'이상으로 유효한 JSON이 아닙니다. – Sirko

+1

'JSON.parse()'는 사용자가 예상 한 것처럼 JSON을 희미한 영역에서 생성하지 않고 실제로 사용할 수있는 실제 객체에 JSON 형식의 원시 문자열을 구문 분석합니다. 문자열이 유효한 JSON이 될 것으로 기대하고 있습니다. 이미 언급 한 다른 JSON과 다를 수 있습니다. –

답변

2

JSON이 아니기 때문에 JSON으로 구문 분석하지 마십시오. 여기 당신이 그것을 할 수있는 방법은 다음과 같습니다

var obj = {}; 
input.split("\r\n").forEach(function(t){ 
    var nv = t.split(':'); 
    obj[nv[0]]=nv[1]; 
}); 

Demonstration (클릭 "JS와 함께 실행"을 엽니 콘솔을)

1

JSON.parse (이 코드는 IE8에서 실행 a shim due to forEach 필요 참고) 매개 변수로 JSON 형식 문자열이 필요하며이를 JavaScript 객체로 변환합니다. 변수 input은 JSON 형식이 아니므로 오류 메시지가 표시됩니다.

JSON 형식 문자열의 모양과 작성 방법은 http://en.wikipedia.org/wiki/JSON을 참조하십시오.

0

JSON.parse() 메서드는 유효한 JSON 문자열이 시작될 것으로 예상합니다. 여기

실제 작업은 기존 데이터에서 이러한 유효한 문자열을 확인하는 것입니다 그리고 한 가지 방법은 다음과 같습니다

var output = input.split(/\r\n/); 
for (var i = 0; i < output.length; i++) { 
    var temp = output[i].split(":"); 
    output[i] = "\"" + temp[0] + "\": \"" + temp[1] + "\""; 
} 
var strJSON = "{" + output.join(", ") + "}"; 
var outputJson = JSON.parse(strJSON); 

Live test case.

+0

문자열을 직접 구문 분석하는 것이 더 간단 할 때 왜이 복잡한 것을 변경하고 JSON으로 구문 분석합니까? –

+0

@dystroy 하나의 루프가 아니라 복잡합니다. 이 경우 어떤 이유로 든'JSON.parse() '를 사용하고있는 원래의 요청을 최소한으로 변경하는 것을 선호합니다. –

관련 문제