我有一个非常长的对象数组,大小约为100,000个项目,在我将其写入文件之前,我将数据传递给JSON.stringify
我收到此错误:
JSON.stringify(
^
RangeError: Invalid string length
Run Code Online (Sandbox Code Playgroud)
如何成功地对一个非常大的json对象进行字符串化?
因为我最初写过这个问题,所以我对处理大量数据变得更加熟悉了,我更喜欢使用Apache Spark来完成这个过程.在Spark中,习惯上不使用大型JSON数组,而是使用包含长串JSON的流或文件,每行一个对象.文件看起来像这样:
{"name":"kristian", "favoriteSong":"enter sandman"}
{"name":"joshua", "favoriteSong":"penny lane"}
{"name":"susan", "favoriteSong":"all about that bass"}
Run Code Online (Sandbox Code Playgroud)
这很好,因为:
fsa*_*int 11
我发现JSONStream是原生JSON.stringify的可靠替代品,适用于大型对象.例如:
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");
}
);
Run Code Online (Sandbox Code Playgroud)
从这里获取示例代码.
如何成功地对一个非常大的json对象进行字符串化?
在部分?例如,打破阵列分成更小的部分,使用JSON.stringify上更小的部分,并追加每个段的文件(你必须做一些[,,和]处理).