Using Node.JS, how do I read a JSON file into (server) memory?

Background

I am doing some experimentation with Node.js and would like to read a JSON object, either from a text file or a .js file (which is better??) into memory so that I can access that object quickly from code. I realize that there are things like Mongo, Alfred, etc out there, but that is not what I need right now.

Question

How do I read a JSON object out of a text or js file and into server memory using JavaScript/Node?

0

12 Answers

Sync:

var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));

Async:

var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data);
});
11

The easiest way I have found to do this is to just use require and the path to your JSON file.

For example, suppose you have the following JSON file.

test.json

{ "firstName": "Joe", "lastName": "Smith"
}

You can then easily load this in your node.js application using require

var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
10

Asynchronous is there for a reason! Throws stone at @mihai

Otherwise, here is the code he used with the asynchronous version:

// Declare variables
var fs = require('fs'), obj
// Read the file and send to the callback
fs.readFile('path/to/file', handleFile)
// Write the callback function
function handleFile(err, data) { if (err) throw err obj = JSON.parse(data) // You can now play with your datas
}
3

At least in Node v8.9.1, you can just do

var json_data = require('/path/to/local/file.json');

and access all the elements of the JSON object.

4

Answer for 2021, using ES6 module syntax and async/await

In modern JavaScript, this can be done as a one-liner, without the need to install additional packages:

import { readFile } from 'fs/promises';
let data = JSON.parse(await readFile("filename.json", "utf8"));

Add a try/catch block to handle exceptions as needed.

2

In Node 8 you can use the built-in util.promisify() to asynchronously read a file like this

const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)
readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'}) .then(contents => { const obj = JSON.parse(contents) console.log(obj) }) .catch(error => { throw error })
4

Using fs-extra package is quite simple:

Sync:

const fs = require('fs-extra')
const packageObj = fs.readJsonSync('./package.json')
console.log(packageObj.version) 

Async:

const fs = require('fs-extra')
const packageObj = await fs.readJson('./package.json')
console.log(packageObj.version) 

using node-fs-extra (async await)

const readJsonFile = async () => { const myJsonObject = await fs.readJson('./my_json_file.json'); console.log(myJsonObject);
}
readJsonFile() // prints your json object
var fs = require('fs');
fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data);
});
// options
fs.readFile('/etc/passwd', 'utf8', callback);

You can find all usage of Node.js at the File System docs!
hope this help for you!

function parseIt(){ return new Promise(function(res){ try{ var fs = require('fs'); const dirPath = 'K:\\merge-xml-junit\\xml-results\\master.json'; fs.readFile(dirPath,'utf8',function(err,data){ if(err) throw err; res(data); })} catch(err){ res(err); } });
}
async function test(){ jsonData = await parseIt(); var parsedJSON = JSON.parse(jsonData); var testSuite = parsedJSON['testsuites']['testsuite']; console.log(testSuite);
}
test();
0

So many answers, and no one ever made a benchmark to compare sync vs async vs require. I described the difference in use cases of reading json in memory via require, readFileSync and readFile here.

If you are looking for a complete solution for Async loading a JSON file from Relative Path with Error Handling

 // Global variables // Request path module for relative path const path = require('path') // Request File System Module var fs = require('fs');
// GET request for the /list_user page.
router.get('/listUsers', function (req, res) { console.log("Got a GET request for list of users"); // Create a relative path URL let reqPath = path.join(__dirname, '../mock/users.json'); //Read JSON from relative path of this file fs.readFile(reqPath , 'utf8', function (err, data) { //Handle Error if(!err) { //Handle Success console.log("Success"+data); // Parse Data to JSON OR var jsonObj = JSON.parse(data) //Send back as Response res.end( data ); }else { //Handle Error res.end("Error: "+err ) } });
})

Directory Structure:

enter image description here

You Might Also Like