NodeJS JSON.stringify非常长的对象数组错误“无效的string长度”

我有一个非常长的数组,大小约为10万个项目,而在我写入文件之前,我将数据传递给JSON.stringify

我得到这个错误:

JSON.stringify( ^ RangeError: Invalid string length 

我怎样才能成功地对一个非常大的json对象进行string化?

更新:

因为我最初写过这个问题,所以我对处理大量数据更加熟悉,而且我更喜欢在这个过程中使用Apache Spark。 在Spark中,习惯上不使用大的JSON数组,而是使用包含JSON长string的stream或文件,每行一个对象。 一个文件看起来像这样:

 {"name":"kristian", "favoriteSong":"enter sandman"} {"name":"joshua", "favoriteSong":"penny lane"} {"name":"susan", "favoriteSong":"all about that bass"} 

这是很好的,因为:

  • 你可以任意处理太大的文件,就像轻松地做一些无逻辑的文件分割,把它转换成一千个较小的文件,逻辑就是简单地在某些换行符处破坏文件N.
  • 这是更好的你永远不会有一个可怕的问题有一个损坏的数据文件在你的手,由未closures的JSON数组引起的。
  • 文件中的大型JSON数组往往没有换行符,因此大文件很难在VIM或其他编辑器中打开,因为它试图将整个东西加载到内存中,而不是使用换行符的文件,它可以在轻松加载前10行左右的屏幕没有问题。

我怎样才能成功地对一个非常大的json对象进行string化?

在部分? 例如,将数组分成较小的部分,在较小的部分使用JSON.stringify ,并将每个段附加到文件(您必须执行一些[ ,和]处理)。

我发现JSONStream是本地JSON.stringify的一个可靠的替代scheme,它适用于大型对象。 例如:

 var fileSystem = require( "fs" ); var JSONStream = require( "JSONStream" ); var records = [ { id: 1, name: "Terminator" }, { id: 2, name: "Predator" }, { id: 3, name: "True Lies" }, { id: 4, name: "Running Man" }, { id: 5, name: "Twins" } // .... hundreds of thousands of records .... ]; var transformStream = JSONStream.stringify(); var outputStream = fileSystem.createWriteStream( __dirname + "/data.json" ); transformStream.pipe( outputStream ); records.forEach( transformStream.write ); transformStream.end(); outputStream.on( "finish", function handleFinish() { console.log("Done"); } ); 

从这里拿了示例代码。