evalまたはJSON.parseを使用して、JavaScriptのオブジェクトにJSONを簡単にロードできます。
しかし、関数のような適切な「クラス」がある場合、JSONデータをどのように取得しますか?
例えば
function Person(name) {
this.name=name;
this.address = new Array();
this.friendList;
this.promote = function(){
// do some complex stuff
}
this.addAddress = function(address) {
this.address.push(address)
}
}
var aPersonJSON = '{\"name\":\"Bob\",\"address\":[{\"street\":\"good st\",\"postcode\":\"ADSF\"}]}'
var aPerson = eval( "(" + aPersonJSON + ")" ); // or JSON.parse
//alert (aPerson.name); // Bob
var someAddress = {street:"bad st",postcode:"HELL"};
//alert (someAddress.street); // bad st
aPerson.addAddress(someAddress); // fail!
重要なのは、JSONから適切なPersonインスタンスを作成できる必要があるということですが、取得できるのはダムオブジェクトだけです。プロトタイプで何かできるかどうか疑問に思っていますか?
JSONの各行を解析し、各変数を対応する関数の属性に割り当てる必要はありません。これは非常に困難です。私が持っている実際のJSONと関数は、上記の例よりもはるかに複雑です。
関数メソッドをJSON文字列にJSON化できると想定していますが、結果のデータをできるだけ小さくする必要があるため、これはオプションではありません-メソッドのjavascriptコードではなく、データを保存してロードするだけです。
また、JSONによってロードされたデータをサブオブジェクトとして配置する必要はありません(ただし、それが唯一の方法である可能性があります)。
function Person(name) {
this.data = {};
this.data.name=name;
}
var newPerson = new Person("");
newPerson.data = eval( "(" + aPersonJSON + ")" );
alert (newPerson.data.name); // Bob
何か案は?