ECMA262 제5판의 설명에 따르면 JSON은 문자열화 및 구문 분석 메소드를 제공하는 내장 객체입니다. 전자는 js 객체를 json 표준을 따르는 문자열로 변환하는 데 사용되고 후자는 json을 따르는 문자열을 변환하는 데 사용됩니다. 표준을 js 객체로 변환합니다. json 표준 참조 json.org . (실제로 eval을 사용하면 json 표준을 준수하는 문자열을 js 객체로 변환할 수 있지만 eval은 상대적으로 성능이 좋지 않고 보안상의 위험도 있습니다(json 문자열에 있는 코드를 실행하게 됩니다). 이 글에서는 JSON만 작성합니다. )
이 글은 변환 의미 문자가 JSON.parse 메소드에 미치는 영향에 대해 작성합니다.
일반적으로 JSON.parse의 매개변수에 전송 문자가 포함된 경우 두 가지 이스케이프 문제가 발생합니다. 실제로 첫 번째는 문자열 자체의 이스케이프이고 두 번째는 문자열로의 실제 변환입니다. js 객체의 이스케이프.
예는 다음과 같습니다.
예 1: '{"a":"b","b":"\\"}' 문자열을 JSON.parse에 전달하고, 먼저 파서가 추출합니다. 작은따옴표 문자열을 묶을 때 첫 번째 문자열은 이스케이프되고, 두 번째 문자열은 이스케이프되고, 네 번째 문자열은 세 번째 문자열이 이스케이프되는 것으로 간주됩니다. 즉, 실제 출력 문자열은 {"a":"입니다. b","b":"\"} (console.log('{"a":"b","b":"\\"}')를 통해 확인할 수 있음) 또 다른 이스케이프가 있습니다. 공식적으로 실제 출력 문자인 js 객체로 변환될 때 첫 번째 객체는 두 번째 객체를 이스케이프합니다(현재는 두 개만 있음). 따라서 console.log(JSON.parse('{"a":"b","b":"\\"}') ) 출력 결과는 Object {a: "b", b: ""}, 또한 즉, 실제 표시되는 데이터는 1개입니다(실제로는 하나의 데이터가 출력될 수 있으며, 이 전에 다른 데이터가 있음을 나타냄).
예 2:
var obj = {
a : "b",
b : "\",
c : {
b : "\",
a : {
b : "\"
}
}
}
var json_str = JSON.stringify(obj)
console.log( JSON.stringify(obj) ) ;
console.dir(JSON.parse(json_str));
console.dir(JSON.parse('{"a":"b","b":"\\","c": {"b":"\\","a":{"b":"\\"}}}')); 출력 결과는 아래와 같습니다
pic
이스케이프 규칙에 따르면, 실제 출력은 다음과 같습니다. 이 출력 앞에 하나가 있어야 합니다. 따라서 위 첫 번째 줄의 출력은 '{"a":"b","b":"\\","c":{"b":"\\","a":{" b"입니다. :"\\"}}}', 세 번째 출력으로 확인할 수 있습니다.
요약하자면, js 객체에 하나를 표시하려면 json 문자열에 4개가 표시되어야 합니다.
기타 특수문자
1. 큰따옴표(")가 올바르게 나타날 경우 \"
2.n이어야 합니다. 생각해 보세요. json 문자열에 필요한 올바른 줄 바꿈은 다음과 같습니다.
실제로 n의 문자를 먼저 이스케이프하면 n은 일반 문자가 됩니다. js 객체로 구문 분석할 때 n과 이전 문자(하나만 남음)는 개행 문자로 해석됩니다. 다음 두 가지는 이와 유사합니다.
3.r,
4.t,