0

I'm planning on storing JS objects in a database, but objects like navigator return "Uncaught RangeError: Maximum call stack size exceeded" when using JSON.stringify(object).

How would I go about serializing to JSON large javascript objects like the navigator object (without pruning)?

4

2 回答 2

1

如果数据如此庞大并且需要插入到数据库中,那么它绝对应该能够被规范化为进一步的子实体和分组,这会将数据带到更小的块中。然后遍历这些数据组并将它们转换为 json 并进一步保存可能会对您有所帮助。

于 2013-06-26T04:15:46.830 回答
1

您可以使用 JSON.stringify 中很少使用的第二个参数在 JSON 上设置一个安全“中断”。这有助于了解为什么 navigator 永远没有足够的空间:

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 次重复后得到要点,但如果可以的话,它可以持续一整夜……我敢打赌,每次调用都有一个 getter 发出一个新对象,因此您永远不会看到同一个对象两次。

将 100 更改为 5000 会使 chrome 崩溃,但没有提供新属性。

于 2013-06-26T04:25:12.777 回答