【发布时间】:2014-01-10 15:19:10
【问题描述】:
我正在尝试在 40MB JSON 文件上运行 jsonlint,但它会以 5 的退出状态停止执行,并显示以下错误消息:
FATAL ERROR: JS Allocation Failed - process out of memory
有谁知道我怎样才能把这个 JSON 打印得漂亮吗?我想知道它是否与节点的--max-old-space-size 参数有关,但我也不确定如何将其传递给已安装的可执行文件。
如果我可以采用另一种方法以人类可读的缩进来呈现它,我也会很感激这些建议。
【问题讨论】:
-
您是在尝试漂亮地打印 JSON 还是对其进行验证? jsonlint 是一个验证器。要漂亮打印,您可以使用
JSON.stringify(JSON.parse(...), false, 2)。 -
绝对是漂亮的打印,但它仍然遇到相同的错误,即使使用
node --max-old-space-size=2000 prettyPrint.js。我的整个脚本是:var fs = require('fs'); var f = fs.readFileSync('ugly.json'), o = JSON.parse(f), p = JSON.stringify( o, null, 3 ); fs.writeFileSync(p, 'pretty.json');。有什么建议吗? -
你有没有想过这个 JSON 会有多大的打印效果? 40MB 主要是单个长字符串还是大量嵌套对象?我问是因为它不一定不可能大于 2000MB,因为当您考虑到您还将占用大量 RAM 来存储解析的结构时。
-
有很多很多的嵌套对象。我设法使用
'\t'的缩进成功地对其进行了字符串化,结果大约为72MB。行数是 1429654。如果我可以将其更改为空格缩进而不是制表符,那也很好,我猜。