自定义JSON.stringify无法将对象整体化为Stringify,但在迭代深度一级时可以正常工作

时间:2011-05-06 11:29:53

标签: javascript json node.js

希望有人能发现错误,因为我遇到了麻烦

好吧,我为自定义大对象构建了自己的JSON.stringify。它可能不完全符合某些边缘情况的规范,但仅适用于我自己构建的大型对象的字符串化。

嗯,它可以工作,并且适用于大多数对象,但我有一个对象我正在尝试进行字符串化并且它失败并在退出之前打印它:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
undefined

不是很有帮助。该对象很好,因为对JSON.stringify(object)的常规调用工作正常,当我用for (var x in obj) if (obj.hasOwnProperty(x)) { myStringify(obj); }迭代对象时工作正常,但如果我在对象的顶层调用它,它会转到地狱......这对我来说真的没有意义,我能想到的唯一一件事就是如果递归在某种程度上打破了某种程度......

The Parser:https://gist.github.com/958776 - 我称之为stringify函数 ObjectIterator.js:https://gist.github.com/958777 - 主要用于提供异步迭代

编辑因此,我将对象深度迭代一层并将结果字符串与JSON.stringify(sameLevelDeep)字符串进行比较,它们是相等的。既然输出是相同的,我不确定这是我解析某些东西的方式,但可能它是如此大的对象或者递归量是如此之高?

编辑2 因此,我想“修复”了这个问题。而不是每第25次迭代被推送到下一个事件循环,我推动每五分之一。我不确定为什么这会产生影响,但确实如此......我想现在的问题是“为什么会有所作为”?

1 个答案:

答案 0 :(得分:0)

好的,除了它是一个非常具体的问题,帮助一个非常具体的人,我想把它带到一个不同的地方,这也可能会消除你的问题,也许可以帮助他人。

由于您没有说明为什么要经历这个过程,我将不得不将其分解并猜测 - 并为每个猜测的想法提供解决方案。

<强> 1。 (浏览器)您正在尝试使用JavaScript来处理数据,并为用户提供结果

在网页上下载至少几兆字节的原始数据(“这些对象的一些”是5-10百万字符“)以处理和显示结果远非最佳,你可能应该这样做在服务器端执行此操作并下载预先计算的结果。

此外,无论你在做什么,JavaScript都不支持线程。 setTimeout(1, function() { JSON.stringify(data); });与你正在做的事情不应该有太大的不同。

<强> 2。 (浏览器)您正尝试显示下载的内容

您应该尝试使用内置的JSON.stringify方法下载较小的块而不是整个1000多万个字符内容。

第3。 (非浏览器)您正在尝试将JavaScript用于需要线程化的应用程序

您应该考虑为此应用程序使用不同的编程语言。

总结

我认为你正在爬错山,你可以在不破汗的情况下实现同样的事情。如果你想要在山上攀爬,那里有山脉需要它 - 但它不是这个。

翻译:在架构上工作以淘汰障碍而不是试图解决它,如果你想解决问题,那么有些问题需要解决 - 但不是这个问题。 / p>