IE8/Firefox3.5/Chrome4/Safari4/Opera10에서는 이 방법을 구현했습니다. 사용법은 매우 간단합니다.
var str = '{"name ":"jack"}';
var json = JSON.parse(str);
alert(json.name)
이 사용됩니다. 이 메소드 "jack"을 구현하는 브라우저가 나타납니다.
Object.prototype에 json을 구문 분석하는 메서드를 추가하는 경우(누군가가 이 작업을 수행하여 기본 객체를 오염시키는 것에 강력하게 반대할 수 있지만 이는 순전히 논의를 위한 것입니다)
Object.prototype.parseJSON = function () {
return JSON.parse(this); }
모든 객체는 Object의 메소드를 상속받기 때문에 이때 바로 사용이 가능합니다.
var str = '{"name":"jack"}'
var json = str.parseJSON()
alert (json.name);
str.parseJSON(), 이것은 parsJSON 내부에서 str을 가리킵니다. 현재 모든 브라우저가 성공적으로 구문 분석할 수 있는 것은 아닙니다.
IE8/Firefox/Safari/Opera에서는 여전히 "잭"이 팝업되는 반면 Chrome에서는 잡히지 않은 불법 액세스라는 오류를 보고합니다.
이렇게 쓰면 왜 크롬에서는 지원하지 않나요? 두 메서드를 비교하면 JSON.parse에 전달된 매개 변수 중 하나는 문자열 str이고 다른 하나는 this입니다. 둘이 별 차이 없는 것 같나요?
str.parseJSON()이 실행될 때, 이는 parseJSON 내부에서 str을 가리켜야 합니다. ParseJSON 메서드 수정:
Object.prototype. parsJSON = function () {
alert(typeof this);
return JSON.parse(this)
};
다시 실행하면 ParseJSON이 나타나는 것을 확인할 수 있습니다. 개체, 아마도 이것이 차이점입니다. 문자열을 직접 새로 작성하면 확실한 효과를 볼 수 있습니다
var js = JSON.parse(new String('{"name":"jack"}'));
alert(js.name);
위 코드는 Chrome을 제외하고 오류가 발생하면 다른 브라우저는 정상적으로 실행됩니다.
기본적으로 결론은 다음과 같습니다.
Chrome에서 JSON.parse의 첫 번째 매개변수는 문자열만 될 수 있고 객체는 될 수 없습니다. (새로운 String 메소드는 지원되지 않습니다.)
위로 돌아가서 give Object.prototype은 json을 구문 분석하는 방법을 추가합니다. 모든 브라우저와 호환되도록 하려면 다음과 같이 작성할 수 있습니다.
Object.prototype.parseJSON = function () {
return JSON.parse(this.toString())
}
var str = '{"name":"jack "}';
var json = str.parseJSON()
alert(json.name)
2010-10 -09: 이 BUG는 Chrome 6에서 수정되었습니다.