evalまたはJSON.parseを使用してJSONを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
JSONを解析するには 'eval'ではなく[' JSON.parse'](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)を使用してください。ターゲットブラウザが 'JSON.parse'をサポートしていない場合(IE7以前)は、Crockfordの' json.js'( 'eval'を内部的に使用しますが、健全性の検証も行います)または' json2。 jsは容易に利用可能である。 –
こんにちは、問題は両方の型のないオブジェクトを生成するevalまたは解析ではない、私は人fuctionにJSONを取得する方法を見つけようとしています。これに関するアイデア? –
@JohnLittleは決してevalを使用しません!多くのセキュリティ問題(コードの挿入など)のソースです[こちらを読む](http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil ) – thepoosh