есть ли необходимость для json в node.js - PullRequest
199 голосов
/ 23 августа 2011

Я хотел бы включить пару файлов JSON в мой код JavaScript, которые находятся в том же каталоге, что и мой исходный файл JavaScript.

Если бы я хотел включить другой файл JavaScript, я мог бы просто использовать require. Теперь я использую readFileSync и __dirname, чтобы получить JSON, что я считаю уродливым способом сделать это.

Есть ли что-то подобное для require, которое позволяет мне загружать JSON-файл?

Ответы [ 5 ]

381 голосов
/ 23 августа 2011

Начиная с узла v0.5.x, да, вы можете требовать свой JSON так же, как и файл js.

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

В ES6:

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

24 голосов
/ 31 марта 2016

Файлы JSON не требуют явного оператора экспорта.Вам не нужно экспортировать, чтобы использовать его в качестве файлов Javascript.

Таким образом, вы можете использовать только require для действительного документа JSON.

data.json

{
  "name": "Freddie Mercury"
}

main.js

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

console.log(obj.name); 
//Freddie Mercury
18 голосов
/ 23 августа 2011

Нет.Либо используйте readFile или readFileSync (последний только во время запуска).

, либо используйте существующую библиотеку, например

В качестве альтернативы запишите свою конфигурацию в файл js, а не в файл json, например

module.exports = {
  // json
}
5 голосов
/ 01 апреля 2019

Два наиболее распространенных

Первый способ:

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

let jsonData = require('./JsonFile') // если мы опускаем .json также работает

ИЛИ

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

Второй способ:

1) синхронно

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

2) асинхронно

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

  jsonData = JSON.parse(data)
})

Примечание: 1) если мы изменили JsonFile.json, мыне получить новые данные, даже если мы запустим require ('./ JsonFile.json')

2) fs.readFile или fs.readFileSync всегда будут повторно читать файл и получать изменения

2 голосов
/ 06 сентября 2018

Вы даже можете использовать требуют вашего JSON без указания расширения .json .Это позволит вам изменить расширение файла на .js без каких-либо изменений в импорте.

при условии, что у нас есть . / MyJsonFile.json в том же каталоге.

const data = require('./myJsonFile')

Если в будущем вы измените . / MyJsonFile.json на . / MyJsonFile.js ничего не должно быть изменено при импорте.

...