Javascript 在node.js脚本中包含大量json的最佳方式是什么?

Javascript 在node.js脚本中包含大量json的最佳方式是什么?,javascript,json,node.js,Javascript,Json,Node.js,如何在node.js脚本中包含550MB的json文件 我试过: var json = require('./huge-data-set.json') 使用增加的-max old space size参数执行脚本 node --max-old-space-size=4096 diff.js 失败的原因是: buffer.js:500 throw new Error('"toString()" failed'); ^ Error: "toString()" failed

如何在node.js脚本中包含550MB的json文件

我试过:

var json = require('./huge-data-set.json')
使用增加的-max old space size参数执行脚本

node --max-old-space-size=4096 diff.js
失败的原因是:

buffer.js:500
    throw new Error('"toString()" failed');
    ^

Error: "toString()" failed
    at Buffer.toString (buffer.js:500:11)
    at Object.fs.readFileSync (fs.js:552:33)
    at Object.Module._extensions..json (module.js:556:20)

出现错误的原因是您试图创建的单个字符串太大

一些可能的解决办法:

使用不同的备份存储,例如sqlite db,并根据需要查询数据,而不是一次将其全部加载到内存中 如果你的数据是一个顶级数组,考虑把每个数组元素放在一个单独的行上,这样你就可以缓冲一行和jSon。但是,如果解析的JavaScript值占用了太多的空间,您仍然可能会遇到内存/GC问题。
节点后面是实现JS实现的v8引擎。v8是用C++编写的,因此它使用类型来保存字符串中的字符,这里谨慎使用。 按照ECMA的规定,JavaScript将每个字符存储在utf16编码的两个字节上

字符串类型是零或多个有序序列的集合 16位无符号整数值“元素”,最大长度为 2^53-1要素

因此,您遇到的不是内存不足限制,而是操作失败,因为字符串大于字符串类型的字节大小


如果您尝试用javascript编写json对象,而不是通过要求从fs读取json对象,则会出现内存不足异常,因为设置该限制是为了防止此类情况发生。

有两件事:您是否尝试使用较小的数据集运行它,以查看.json的大小是否是问题所在?如果没有,你能发布与错误相关的代码吗?也许JSON是无效的?呃,我不确定有多少解析器准备使用500兆的XML,这通常应该更重。500兆的JSON是相当多的。只有第一行需要JSON的脚本会导致错误。通常,我用node拆分大json文件,但这次我无法加载任何内容。这可能会解决您的问题:有没有办法增加字符串的默认限制?过去我成功地加载了大约250mb的文件。@user1276919我认为JSON不应该被用作大数据存储。我建议您不要以各种方式修改限制,因为您将很难让它在另一台机器上工作。如果你对Node.js做了太多的调整,那么即使是Node.js的更新也可能会破坏你的脚本。这个答案更有助于提高对问题的理解,而@Paulpro的评论有助于解决同样的问题