JSON은 원시 데이터 형식입니다. 매우 원시적입니다. 사전 (일명 자바 스크립트 객체, 해시, 연관 배열), 배열, 문자열, 숫자, 부울 및 null을 지원합니다. 그게 전부 야. 더 많은 일을하지 않는 이유는 원시 언어가 언어에 구속력이없고 거의 모든 프로그래밍 언어가 이러한 유형의 데이터를 처리 할 수있는 도구를 내장하고 있기 때문입니다.
"class"와 같은 다른 표기법을 사용하면 갑자기 특정 언어 나 코드 케이스에 매우 달라지며 광범위하고 일반적인 적용 가능성을 잃게됩니다.
JSON을 간단한 원시 데이터로 생각하십시오. JSON 은 인스턴스 마샬링 또는 완전한 개체 직렬화가 아닙니다. 따라서 생성자에서 인스턴스화 된 JS 객체를 직렬화하려는 경우 "revivers"를 작성해야합니다.
new Book({
title: "One Thousand and One Nights",
author: "Scheherazade"
});
당신은 단순히 선택의 생성자에 대한 호출로 데이터의 당신의 일반 목적 (당신의 JSON.parse()
의 결과를) 통과 :
이
은 접근
things like backbone.js take입니다. 거기에서 당신은 당신의 새로운 목표에 그것의 가치를 읽는 많은 것을 할 수있다.
자바에는 루비 에서처럼 Marhsal.dump(obj)
과 같이 전체 개체를 정렬하는 표준 방법이 없습니다.
편집 : 마지막으로 중요한 점 ... 다른 언어에서 생각하는 것처럼
자바 스크립트 객체는 "유형"을 필요가 없습니다. Javascript 객체는 단순히 키/값 쌍의 사전입니다. new SomeClass()
같은 작업을 수행하면 함수 개체의 prototype
속성을 가리키는 특수 prototype
속성이있는 새 개체를 얻게됩니다. 객체가 인 경우 인 경우 SomeClass
의 인스턴스는 언뜻 생각하면 생각할 수있는 것보다 명확하지 않습니다.
대신 "내 생성자 함수 객체는 무엇입니까?"라고 물어볼 수 있습니다. 또는 "프로토 타입 체인에 어떤 객체가 있습니까?"
문자열로 저장되는 JSON에 "type"을 전달하려면 프로토 타입 객체에 대한 참조를 어떻게 저장합니까? 어쩌면 프로토 타입 객체는 전역 영역에 이름이 지정되지 않고 클로저를 통해서만 사용할 수 있습니까? 그런 다음 문자열에 쓰면 더 이상 프로토 타입 객체를 참조 할 방법이 없습니다.
점은 폐쇄 어휘 범위 지정 및 개체에 더 리터럴 값 이상의 C 포인터처럼 그 값을 유지한다는 사실을 기반으로 자바 스크립트 프로토 타입 접근 방식이 완전히 직렬화 객체에 매우 열심히한다, 그것과 결합 된 인스턴스를 반대하는 것입니다 VM 외부의 위치로 이동합니다.
'reviver' [here] [1] 사용에 대한 답을 참조하십시오. [1] : http://stackoverflow.com/questions/14027168/how-to-load-json-into-a-function-rather-than-an-object/14028886#answer-14028886 –