user3872094
user3872094

Reputation: 3351

unable to create array from multiple files data

I've 2 files as below.

f1.json

{
"name":"user1"
}

f2.json

{
"name":"user2"
}

and here is my code snippet.

var fs = require("fs");

function readIt() {
  let combined = [];
  fs.readdir("jsonfiles", function (err, files) {
    files.forEach(function (file, index) {
      combined.push(fileread("jsonfiles/" + file));
    });

    fs.writeFile("test.json", combined.toString(), (err) => {
      if (err) console.log(err);
      console.log("Successfully Written to File.");
    });
  });
}

function fileread(filename) {
  var contents = fs.readFileSync(filename);
  return contents;
}

readIt();

when I run this, the resulting output is as below

{
  "name":"user1"
},
{
  "name":"user2"
}

but I want it to be

[
{
  "name":"user1"
},
{
  "name":"user2"
}
]

Please let me know where I'm going wrong.

Thanks

Upvotes: 0

Views: 35

Answers (1)

Dhana D.
Dhana D.

Reputation: 1720

Instead of toString(), you should use JSON.stringify().

To see their different behavior, you can try this snippet:

var jsonArr = [{name: "Mia"}, {name: "Eddie"}];

// toString()
console.log(jsonArr.toString());

// JSON.stringify()
console.log(JSON.stringify(jsonArr));

JavaScript Array.prototype.toString() just prints out the elements of the array, excluding the array bracket, but JSON.stringify() prints whole Javascript object structure as a valid JSON.

As the fs.writeFile() in Node.JS needs/consumes buffer, so you need to store the JSON string result in a variable before using it.

let jsonArr = [{name: "Mia"}];
const jsonString = JSON.stringify(jsonArr);
fs.writeFile("data.json", jsonString, (err) => ...);

Upvotes: 2

Related Questions