Writing JSON object to a JSON file with fs.writeFileSync
Solution 1
You need to stringify the object.
fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output));
Solution 2
I don't think you should use the synchronous approach, asynchronously writing data to a file is better also stringify the output
if it's an object
.
Note: If output
is a string, then specify the encoding and remember the flag
options as well.:
const fs = require('fs');
const content = JSON.stringify(output);
fs.writeFile('/tmp/phraseFreqs.json', content, 'utf8', function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
});
Added Synchronous method of writing data to a file, but please consider your use case. Asynchronous vs synchronous execution, what does it really mean?
const fs = require('fs');
const content = JSON.stringify(output);
fs.writeFileSync('/tmp/phraseFreqs.json', content);
Solution 3
Make the json human readable by passing a third argument to stringify
:
fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 4));
Solution 4
When sending data to a web server, the data has to be a string (here). You can convert a JavaScript object into a string with JSON.stringify()
.
Here is a working example:
var fs = require('fs');
var originalNote = {
title: 'Meeting',
description: 'Meeting John Doe at 10:30 am'
};
var originalNoteString = JSON.stringify(originalNote);
fs.writeFileSync('notes.json', originalNoteString);
var noteString = fs.readFileSync('notes.json');
var note = JSON.parse(noteString);
console.log(`TITLE: ${note.title} DESCRIPTION: ${note.description}`);
Hope it could help.
Solution 5
Here's a variation, using the version of fs
that uses promises:
const fs = require('fs');
await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
Romulus3799
I am a high school student who wants to go into programming. I've taught myself pretty much everything useful that I know, and I started a Coding Club at my school. I code because it's fascinating, addicting, and fun. Coding has become my favorite pastime, so naturally I would want to get paid for it in the future!
Updated on September 17, 2020Comments
-
Romulus3799 almost 4 years
I am trying to write a JSON object to a JSON file. The code executes without errors, but instead of the content of the object been written, all that gets written into the JSON file is:
[object Object]
This is the code that actually does the writing:
fs.writeFileSync('../data/phraseFreqs.json', output)
'output' is a JSON object, and the file already exists. Please let me know if more information is required.
-
LightBender almost 7 yearsWelcome to SO, before answering a question, try to review the existing answer. If your answer has already been suggested, upvote that answer instead. See the community guide for writing a good answer.
-
Hilton Shumway over 6 yearsIf it's being done in a short script or something, synchronous is fine. If it's part of a server request or something, then it should be asynchronous.
-
Akinjide over 6 yearsNot necessarily, I/O bound processes should be made asynchronous, but depending on the short script complexity you might opt in for synchronous.
-
Stephan Bijzitter over 6 yearsThis is not an answer to the question.
-
Brian Duncan about 6 yearsI like that this answers the question without opinions about whether or not to use synchronous vs async operations.
-
Anthony about 6 yearsUser specifically asked for synchronous method
-
fccoelho over 5 yearsthis is generating a empty object:
{}
-
Akinjide over 5 yearswhat do you have has
output
inconst content = JSON.stringify(output);
i.e.const content = JSON.stringify({ 'hello': 'world' });
-
TamusJRoyce over 5 yearsPlease stop saying async good. And implying sync bad. If you are worried about speed, your webpack should do that optimization for you. You are not an optimizer. Reason: sync file writing is needed for json command-line tools. Which must close any files they have open before piping data to the next app in the chain.
-
Binh over 4 yearsFor readability purposes, you can use the space parameter of the JSON.stringify method:
fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));
More: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
Jason Rice about 4 yearsSynchronous is completely fine. There's no reason it shouldn't be accepted and supported.