我想json.stringify一個1 GB的對象,以便我可以將它寫入磁盤。我得到FATAL ERROR: JS Allocation failed - process out of memory
nodejs json.stringify一個1GB的對象用盡內存
我能做些什麼來成功地進行串聯?
我想json.stringify一個1 GB的對象,以便我可以將它寫入磁盤。我得到FATAL ERROR: JS Allocation failed - process out of memory
nodejs json.stringify一個1GB的對象用盡內存
我能做些什麼來成功地進行串聯?
您可以手動逐位串聯:如果y
是x
的關鍵,那麼JSON.stringify(y) + ":" + JSON.stringify(x[y])
會爲您提供一個段。
使用fs.appendFileSync
,例如,你可以使用:
var output = "out.json";
fs.writeFileSync(output, "{");
var first = true;
for(var y in x) {
if(x.hasOwnProperty(y)) {
if(first) first = false;
else fs.appendFileSync(output, ",");
fs.appendFileSync(output, JSON.stringify(y) + ":" + JSON.stringify(x[y]))
}
}
fs.appendFileSync(output, "}");
你也可以使用一個Write Stream
與對象,數組檢查
var first, y, i$, ref$, len$, toString$ = {}.toString;
switch (toString$.call(x).slice(8, -1)) {
case 'Object':
fs.writeFileSync(output, '{');
first = true;
for (y in x) {
if (x.hasOwnProperty(y)) {
if (first) {
first = false;
} else {
fs.appendFileSync(output, ',');
}
fs.appendFileSync(output, JSON.stringify(y) + ':' + JSON.stringify(x[y]));
}
}
fs.appendFileSync(output, '}');
break;
case 'Array':
fs.writeFileSync(output, '[');
first = true;
for (i$ = 0, len$ = (ref$ = x).length; i$ < len$; ++i$) {
y = ref$[i$];
if (first) {
first = false;
} else {
fs.appendFileSync(output, ',');
}
fs.appendFileSync(output, JSON.stringify(y));
}
fs.appendFileSync(output, ']');
break;
default:
fs.writeFileSync(output, JSON.stringify(x));
}
您擴展可能會考慮呃https://github.com/dominictarr/JSONStream –
@Dan D.我會接受這個答案。 – Harry