首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不触发RangeError的情况下使用fs和JSONStream编写大文件:超出最大调用堆栈大小

如何在不触发RangeError的情况下使用fs和JSONStream编写大文件:超出最大调用堆栈大小
EN

Stack Overflow用户
提问于 2020-07-11 08:43:01
回答 1查看 144关注 0票数 0

我在这里所做的是尝试用其他东西替换JSON.stringify(),以避免RangeError。我找到了下面的方法。

这是我的代码:(我使用big-json模块,这个模块实现json-stream-stringify作为stringify)

代码语言:javascript
复制
const data = generateData();       
                   
const stringifyStream = json.createStringifyStream({  
    body: data
});

stringifyStream.on('data', function(str) {
    console.log(str.toString());
})

我试着打印str,它会逐行打印字符串类型的数据,我的问题是:如何将完整的str写入文件?我尝试在console.log()之后添加fs.writefileSync(),它只会写入str的最后一行。抱歉,我是第一次接触stream和node.js。我不知道如何修复它。

另一个问题是,我能否找到像JSON.stringify(data, null, 2)一样重新格式化输出字符串的方法?

仅供参考:数据是一个非常深入的对象。没有循环,但可能有重复的部分。我更喜欢保持一切不变,而不是修剪。

真的很感谢大家的帮助!谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

发布于 2020-07-11 10:12:43

你有没有试过从fs.writeFileSync中分离出JSON.stringify?只是想知道一个人到底是不是有问题。

如果它是JSON.stringify,我建议你将对象分成多个,或者过滤你使用的对象。尽你所能减少实际数据。我们不知道de data到底是什么,所以我不能对此做出假设,但一般来说,你永远不会有这些问题,如果它是由太大的数据引起的,那么你就做错了!

如果问题出在fs.writeFileSync上,并且您已经对JSON进行了字符串化,那么可以尝试使用fs.createWriteStream来写入数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62844017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档