私はHTML 5の新しいローカルストレージを検討してきました。私はJSONを使用してオブジェクトを文字列にシリアル化し、それらをオブジェクトに戻して解析することにしました。しかし、それは簡単ではありません。私はあなたがただJSON.stringify()
オブジェクトを持っていて、それがあなたのためにうまくいくと期待できないことを発見しましたが、代わりに何をしなければならないか分かりません。JSONで複雑なオブジェクトアーキテクチャをパックして展開する
私のオブジェクトには2つの配列があり、それぞれに別のタイプのオブジェクトを保持し、そのうちの1つは多次元です。ここに私のかなり複雑で相互依存オブジェクトのアーキテクチャは次のようになります。
function Vector2(x, y) {
this.x = x;
this.y = y;
}
function Bar(ID, position) {
this.id = id;
this.position = position;
}
function Goo(state, position) {
this.on = state;
this.position = position;
}
function Foo(name, size) {
this.name = name;
this.size = size;
this.bars = new Array(width)
this.goos = new Array(10);
this.Initialize();
}
Foo.prototype.Initialize() {
for(var x = 0;x<this.size.x;x++) {
this.bars[x] = new Array(this.size.y);
for(var y=0;y<this.size.y;y++) {
this.bars[x][y] = new Bar(x + y, new Vector2(x, y));
}
}
for(var i = 0;i<this.goos.length;i++) {
this.goos[i] = new Goo(on, new Vector2(i, i/2 + 1));
}
}
これらのオブジェクトのそれぞれは、それぞれが、私はFooのにメソッドを追加するために使用したのと同じプロトタイプメソッドを使用して追加、同様の付加機能がたくさんあります。私が言ったように、複雑。私の質問は、どのように私はこれをすべてシリアル化するのですか?私は実際にすべてのオブジェクトにtoJSON()
の機能をつける必要がありますか?
最後に、これをすべてパックしてlocalstorage
に保存したら、それを取得する方法はわかっていますが、JSONでアンパックする方法はほとんど分かりません。それは別の問題ですが、私は一度すべてを詰める方法を学ぶと、自分で理解するのが少し楽になるかもしれないと思います。
注:私は通常このような潜在的な広範な質問はしませんが、私は実際には、または実際に問題を解決する私の(確かに弱い)Google-fuで何もここで見つけることができませんでした。どのようにこの質問をさらに破るか。
ポジティブな結果をもたらしたので、私は実際に、私はそれらを再構築する必要があるだけのものをオブジェクトをシリアル化ではないでしょうか?簡単なテストでありますかそれは非常に有望であると思います、私はすべてをシリアル化するよりも現実的であることを認めます... :) –
@ElliotBonneville - はい。あなたが実際に複雑なオブジェクトの関係を直列化することができる言語がありますが、JavaScriptはそのようなものではありません。データを保存し、データからオブジェクトを再構成することができます。これには、実際のデータを保存するだけで、保存形式が実装スキームと密接に結びついていないという利点もあります。コードを再設計し、同じ保存データフォーマットをサポートすることができます。私は、最高のデータフォーマットは実際の実装から100%独立しているので、実装は自由に変更できると主張します。 – jfriend00
これは適切な行動のコースのように聞こえる。私はあなたの答えを受け入れています。ありがとう! –