JSON 웹 사이트 의 상태 머신 다이어그램에 따르면 이스케이프 된 큰 따옴표 문자 만 사용할 수 있고 작은 따옴표는 사용할 수 없습니다. 작은 따옴표는 이스케이프 할 필요가 없습니다.
업데이트 -관심있는 사람들을위한 추가 정보 :
Douglas Crockford는 JSON 사양이 문자열 내에서 이스케이프 된 작은 따옴표를 허용하지 않는 이유를 구체적으로 말하지 않습니다. 그러나 JavaScript의 부록 E : The Good Parts 에서 JSON에 대해 논의하는 동안 그는 다음과 같이 씁니다.
JSON의 디자인 목표는 최소한의 이식성, 텍스트 및 JavaScript의 하위 집합이었습니다. 상호 운용하기 위해 동의 할 필요가 적을수록 더 쉽게 상호 운용 할 수 있습니다.
따라서 그는 모든 JSON 구현에서 동의 해야하는 규칙 중 하나이기 때문에 큰 따옴표를 사용하여 문자열 만 정의하도록 결정했을 것입니다. 결과적으로 문자열은 큰 따옴표 문자로만 종료 할 수 있기 때문에 문자열 내의 작은 따옴표 문자가 실수로 문자열을 종료하는 것은 불가능합니다. 따라서 공식 사양에서 작은 따옴표 문자를 이스케이프 처리 할 필요가 없습니다.
조금 더 깊이 파고, 크록 포드의
org.json의 Java 용 JSON의 구현은 더 허용하고
않는 작은 따옴표 문자를 사용할 수 :
toString 메소드로 생성 된 텍스트는 JSON 구문 규칙을 엄격하게 준수합니다. 생성자는 그들이 받아 들일 텍스트에서 더 관대합니다.
...
- 문자열은 '(작은 따옴표)로 인용 될 수 있습니다.
이것은 JSONTokener 소스 코드에 의해 확인됩니다 . 이 nextString
방법은 이스케이프 된 작은 따옴표 문자를 허용하고 큰 따옴표 문자처럼 취급합니다.
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
이 방법의 맨 위에는 유익한 주석이 있습니다.
공식 JSON 형식은 작은 따옴표로 문자열을 허용하지 않지만 구현에서는 문자열을 허용 할 수 있습니다.
따라서 일부 구현은 작은 따옴표를 허용하지만 이것에 의존해서는 안됩니다. 많은 대중적인 구현은 이와 관련하여 상당히 제한적이며 작은 따옴표로 묶인 문자열 및 / 또는 이스케이프 된 작은 따옴표를 포함하는 JSON을 거부합니다.
마지막으로 이것을 원래 질문에 다시 연결하기 위해 jQuery.parseJSON
하기 위해 먼저 브라우저의 기본 JSON 파서 또는 json2.js 와 같은로드 된 라이브러리를 사용하려고 시도합니다 (측면에서 jQuery 논리가 JSON
정의되지 않은 경우 라이브러리입니다 ) . 따라서 jQuery는 기본 구현만큼이나 관용적 일 수 있습니다.
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
내가 아는 한이 구현은 공식 JSON 사양 만 준수하고 작은 따옴표를 허용하지 않으므로 jQuery도 마찬가지입니다.