JS オブジェクトをデータベースに保存する予定ですが、JSON.stringify(object) を使用すると、ナビゲーターなどのオブジェクトが「Uncaught RangeError: Maximum call stack size exceeded」を返します。
ナビゲーター オブジェクトのような JSON の大きな JavaScript オブジェクトを (プルーニングなしで) シリアル化するにはどうすればよいですか?
JS オブジェクトをデータベースに保存する予定ですが、JSON.stringify(object) を使用すると、ナビゲーターなどのオブジェクトが「Uncaught RangeError: Maximum call stack size exceeded」を返します。
ナビゲーター オブジェクトのような JSON の大きな JavaScript オブジェクトを (プルーニングなしで) シリアル化するにはどうすればよいですか?
データが非常に大きく、データベースに挿入する必要がある場合は、データをより小さなチャンクにするさらなるサブエンティティとグループ化に確実に正規化できるはずです。次に、これらのデータのグループを繰り返し処理し、それらを json に変換してさらに保存すると役立つ場合があります。
JSON.stringify のめったに使用されない 2 番目のパラメーターを使用して、JSON に安全な「中断」を加えることができます。これは、ナビゲーターに十分なスペースがない理由を理解するのに役立ちます:
var used=[];
var str=JSON.stringify(navigator, function(a,b,c){
if(used.indexOf(b)===-1 && used.length < 100 ){
used.push(b);
return b;
}
});
alert(str);
//shows: {"geolocation":{},"webkitPersistentStorage":{},"webkitTemporaryStorage":{},"onLine":true,"vendorSub":"","vendor":"Google Inc.","productSub":"20030107","product":"Gecko","mimeTypes":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{"0":{"enabledPlugin":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
たった100回の繰り返しでポイントを獲得できますが、できれば一晩中続く可能性があります...呼び出しごとに新しいオブジェクトを放出するゲッターがあるに違いないので、同じオブジェクトが2回表示されることはありません.
100 を 5000 に変更すると、chrome がクラッシュしますが、新しいプロパティは得られません。