2011-10-10 4 views
3

자바 스크립트에서 문자열이 있습니다 :JSON을 구문 분석하는 동안이 구문 오류의 원인은 무엇입니까?

var test = '{"test":"\\-"}' 

또는

형식의 SyntaxError가 발생합니다. "unexpected_token_number". "test" 속성 값은 사용자가 입력 할 수있는 필드입니다. 이 필드를 어떻게 올바르게 벗어나야합니까?

+0

, 내가 먼저 내 JSON을 stingified 다음 구문 분석 : 당신은 JSON에서 탈출 백 슬래시를 넣어하려는 경우

당신은 리터럴 문자열에 넣어 그것을 탈출해야 그것. –

답변

18

'{"test":"\\-"}'은 결과 문자열이 {"test":"\-"} 인 JavaScript 문자열로 해석됩니다. 당신이 these diagrams에서 볼 수 있듯이

\-는 (유효은 \", \\, \/, \b, \f, \n, \r, \t, \uxxxx) 유효한 이스케이프 시퀀스가 ​​아닙니다. 당신은 JSON에서 두 개의 백 슬래시를 원하는 경우

JSONLint은 또한 당신이로 끝날 것 때문에뿐만 아니라, 자바 스크립트 문자열을 탈출해야 오류

Parse error on line 2: 
{ "test": "\-"} 
-------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

을 제공

var test = '{"test": "\\\\-"}'; 

그렇지 않으면 다음을 생략하십시오.

var test = '{"test": "-"}'; 
0

테스트의 가치는 무엇입니까? \은 JavaScript에서 이스케이프 문자입니다. 여기

var test = '{"test":"\\\\-"}' 

//Result: { test="\-"} 
1

당신은 이동 :

var test = '{"test":"\-"}' 
JSON.parse(test) 

은 당신이 원하는 무엇인가요 당신이 그것을 탈출하려는 당신이 \-로 시험의 값을 원하는,이 작동한다고 가정하면? 가질 수 : {test: "-"}?

Otherwiste :

var test = '{"test":"\\\\-"}' 
JSON.parse(test) 

이 가지고 : {test:"\-"}

건배

3

귀하의 JSON은 다음과 같습니다 문자열 내부

{ 
    "test": "\-" 
} 

하는 \ 문자 must be followed by",에게 물음표가 16 진수를 나타내는 경우, r, t 또는 u????입니다.

{ 
    "test": "\\-" 
} 

을 제대로 자바 스크립트 문자열로 변환하는 데 실패하지만, 자바 스크립트에 대한 \ 문자를 이스케이프되지 않습니다

당신은 아마 JSON는 다음과 같이하고자합니다.

var test = '{"test":"\\\\-"}' 
0

해당 문자열을 구문 분석하려고하면 "나쁜 이스케이프 문자"가 표시됩니다.

이스케이프가 필요없는 문자를 이스케이프 처리하는 이유가 여기에 있습니다. 문자열 리터럴의 \\은 이스케이프 된 백 슬래시이므로 이스케이프 코드 \-이 문자열에 포함됩니다. 대시는 이스케이프가 필요하지 않으므로 이스케이프 코드가 JSON 파서에서 허용되지 않습니다.

나는 또한 일부 유사한 문제에 직면했다
var test = '{"test":"\\\\-"}' 
관련 문제