Reputation: 3351
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
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