Skip to content

JSON.stringify error and writeFileSync error #7923

@ralic

Description

@ralic

[Issue]

Here is the use case :
There are ~ 95000 txt files stored in the same folder
Each txt files contains array of objects, size=50.
I tried to aggregate all these txt's files's objects into an array.
There are 2037356 obj(s) in the Array, and each object stringified length reported to be no more than "2237" after checked each element's length by JSON.stringify(obj).length.

When I try to write them into a large json file as in code attached below. There are some errors returned. I wonder whether I shall avoid using writeFileSync and go for fs.append to prevent "RangeError: Invalid string length" in such case.

Please advise... thanks !
Note. I've increased heap to 8192 to prevent process out of memory error.

app.js:

var shell=require('shelljs/global')
var lineReader = require('line-reader');
var fs  = require("fs");
var jsonfile = require('jsonfile')
var write2file = 'data.json'

var strings=[];
var objs=[];
// line ~=int range of 200~99000;
lineReader.eachLine('zips',function(line,last){
    var zip='./info/'+line+'.txt';
    console.log(zip);
    var string= fs.readFileSync(zip).toString()
    var arrOfObj = eval(string);
    delete string;
    for ( var i in arrOfObj) {
        console.log(JSON.stringify(arrOfObj[i]).length)
        objs.push(arrOfObj[i])
    }
      if(last){
        console.log(objs.length)
        jsonfile.writeFileSync(write2file, objs, function (err) {
        console.error(err)
        });
        console.log("Done");
      }
});
shjs  app.js

/Users/raliclo/kroger/node_modules/jsonfile/index.js:108
  let str = JSON.stringify(obj, options.replacer, spaces) + '\n'
                 ^

RangeError: Invalid string length
    at Object.stringify (native)
    at Object.writeFileSync (/Users/raliclo/kroger/node_modules/jsonfile/index.js:108:18)
    at /Users/raliclo/kroger/get.js:27:14
    at /Users/raliclo/kroger/node_modules/line-reader/lib/line_reader.js:279:15
    at getLine (/Users/raliclo/kroger/node_modules/line-reader/lib/line_reader.js:166:7)
    at Object.nextLine (/Users/raliclo/kroger/node_modules/line-reader/lib/line_reader.js:175:11)
    at Immediate.readNext [as _onImmediate] (/Users/raliclo/kroger/node_modules/line-reader/lib/line_reader.js:269:14)
    at tryOnImmediate (timers.js:543:15)
    at processImmediate [as _immediateCallback] (timers.js:523:5)

Metadata

Metadata

Assignees

No one assigned

    Labels

    v8 engineIssues and PRs related to the V8 dependency.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions