0

JS オブジェクトをデータベースに保存する予定ですが、JSON.stringify(object) を使用すると、ナビゲーターなどのオブジェクトが「Uncaught RangeError: Maximum call stack size exceeded」を返します。

ナビゲーター オブジェクトのような JSON の大きな JavaScript オブジェクトを (プルーニングなしで) シリアル化するにはどうすればよいですか?

4

2 に答える 2

1

データが非常に大きく、データベースに挿入する必要がある場合は、データをより小さなチャンクにするさらなるサブエンティティとグループ化に確実に正規化できるはずです。次に、これらのデータのグループを繰り返し処理し、それらを json に変換してさらに保存すると役立つ場合があります。

于 2013-06-26T04:15:46.830 に答える
1

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 がクラッシュしますが、新しいプロパティは得られません。

于 2013-06-26T04:25:12.777 に答える