is there a require for json in node.js

Jsonnode.jsRequire

Json Problem Overview


I would like to include a couple of JSON files in my JavaScript code that are in the same directory as my JavaScript source file.

If I wanted to include another JavaScript file I could simply use require. Now I'm using readFileSync and __dirname to get the JSON, which I think is an ugly way to do it.

Is there something similar for require that enables me to load a JSON file?

Json Solutions


Solution 1 - Json

As of node v0.5.x yes you can require your JSON just as you would require a js file.

var someObject = require('./somefile.json')

In ES6:

import someObject from ('./somefile.json')

Solution 2 - Json

JSON files don’t require an explicit exports statement. You don't need to export to use it as Javascript files.

So, you can use just require for valid JSON document.

data.json

{
  "name": "Freddie Mercury"
}

main.js

var obj = require('data.json');

console.log(obj.name); 
//Freddie Mercury

Solution 3 - Json

Two of the most common

First way :

let jsonData = require('./JsonFile.json')

let jsonData = require('./JsonFile') // if we omitting .json also works

OR

import jsonData from ('./JsonFile.json')

Second way :

  1. synchronously

    const fs = require('fs') let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))

  2. asynchronously

    const fs = require('fs') let jsonData = {} fs.readFile('JsonFile.json', 'utf-8', (err, data) => { if (err) throw err

    jsonData = JSON.parse(data) })

Note:

  1. if we JsonFile.json is changed, we not get the new data, even if we re run require('./JsonFile.json')

  2. The fs.readFile or fs.readFileSync will always re read the file, and get changes

Solution 4 - Json

No. Either use readFile or readFileSync (The latter only at startup time).

Or use an existing library like

Alternatively write your config in a js file rather then a json file like

module.exports = {
  // json
}

Solution 5 - Json

A nifty non-caching async one liner for node 15 modules:

import { readFile } from 'fs/promises';

const data = await readFile('{{ path }}').then(json => JSON.parse(json)).catch(() => null);

Solution 6 - Json

You can import json files by using the node.js v14 experimental json modules flag. More details here

file.js

import data from './folder/file.json'

export default {
  foo () {
    console.log(data)
  }
}

And you call it with node --experimental-json-modules file.js

Solution 7 - Json

You even can use require of your JSON without specifying the extension .json. It will let you change the file extension to .js without any changes in your imports.

assuming we have ./myJsonFile.json in the same directory.

const data = require('./myJsonFile')

If in the future you'll change ./myJsonFile.json to ./myJsonFile.js nothing should be changed in the import.

Solution 8 - Json

You can use a module to create a require.

import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const foo = require('./foo.js')

Solution 9 - Json

if you are using typescript, you can just add in your tsconfig.json a new field called resolveJsonModule: true, and then you can import all the informations of any .json file just like this:

import * as jsonfile from "./path/to/json"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCornoView Question on Stackoverflow
Solution 1 - JsongoatslackerView Answer on Stackoverflow
Solution 2 - JsonserkanView Answer on Stackoverflow
Solution 3 - JsonrajmobiappView Answer on Stackoverflow
Solution 4 - JsonRaynosView Answer on Stackoverflow
Solution 5 - JsonsomView Answer on Stackoverflow
Solution 6 - JsondreamLoView Answer on Stackoverflow
Solution 7 - JsonIgor LitvinovichView Answer on Stackoverflow
Solution 8 - JsonThanawat GulatiView Answer on Stackoverflow
Solution 9 - JsonThiago DantasView Answer on Stackoverflow