2011-01-02 3 views
6

Chrome 또는 Firebug의 자바 스크립트 콘솔에서 실행하면 정상적으로 작동합니다.JSON 표준의 문자열에 큰 따옴표와 백 슬래시를 사용할 수없는 이유는 무엇입니까?

JSON.parse('"\u0027"') // Escaped single-quote 

그러나 자바 스크립트 콘솔에서이 두 줄 중 하나를 실행하면 오류가 발생합니다.

JSON.parse('"\u0022"') // Escaped double-quote 
JSON.parse('"\u005C"') // Escaped backslash 

RFC 4627 section 2.5

는 제대로 탈출하고 같은 \"만큼 문자를 허용하는 것을 의미하는 것으로 보인다. 그러나 이것을 시도한 2 개의 브라우저는 허용하지 않는 것 같습니다. 내가 여기서 잘못하고있는 것 또는 정말로 문자열에 허용되지 않는 것이 있습니까? 또한 \u0022\u005C 대신에 \"\\을 사용하려고했습니다.

JSON이 문자열에서 이러한 문자를 허용하지 않을 것이라고 생각하기 때문에 뭔가 잘못하고있는 것처럼 느껴집니다. 특히 사양에서 문자를 찾을 수 없다고 생각하는 것 같습니다. 허용되지 않습니다.

답변

8

백 슬래시를 인용해야합니다. 우리가 다른 어떤 이름으로 장미

전화

상관없이 상수 문자열에 그것을 표현하는 방법, 달콤한

따옴표는 따옴표입니다 냄새가 없을 것입니다. 상수 내에서 \u 표현식 앞에 백 슬래시를 넣으면 그 효과는 백 슬래시로 인용 된 큰 따옴표의 효과입니다.

질문에 대한 가장 흥미로운 점은 필자가 작성한 모든 JavaScript 문자열 파서가 잘못되었음을 깨닫는데 도움이된다는 것입니다.

3

\ u00xx가 자바 스크립트 파서에 의해 해석되므로 백 슬래시와 큰 따옴표를 이스케이프 처리하지 않습니다.

JSON.parse('"\\\u0022"') 
JSON.parse('"\\\""') 

JSON.parse('"\\\u005C"') 
JSON.parse('"\\\\"') 

작업은 예상대로.

+0

'JSON.parse'가 도와 줬습니다. 감사합니다 ... D –

4

JavaScript는 JSON 구문 분석기에 도달하기 전에 유니 코드 이스케이프 시퀀스를 해석합니다. 캐릭터를 나타내는 유효 JSON "'"
두번째합니다 (JSON 파서) : 제 인용되지 않은 '

  • '"\u0022"'

    • '"\u0027"'는 (자바 스크립트에 의해) 최초로 인용되지 않은이 문제를 야기 시간 (JavaScript 기준) : """
      JSON 파서는 따옴표로 묶지 않은 버전 """을 잘못된 JSON (마지막 인용 부호는 필요하지 않음)으로 간주합니다."\"
      JSON 파서는 또한 (문자열을 종료하지 않습니다 그래서 두 번째 따옴표 백 슬래시 이스케이프과) "\" 무효 JSON이 인용되지 않은 버전을보고 :

    • '"\u005C"'

      은 (자바 스크립트로) 처음 인용 부호로 둘러싸이지 않은.

    이에 대한 수정은 아마 그냥 JSON 파서를 사용하지 것이다, 그러나, 현실에서 \\u....으로, 이스케이프 시퀀스를 탈출하는 것입니다. 정확한 컨텍스트에서 사용하면 (괄호 안에 포장하여 모든 JSON이 유효합니다.)

  • 관련 문제