我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。

如果我想包含另一个JavaScript文件,我可以简单地使用require。 现在我使用readFileSync和__dirname来获取JSON,我认为这是一种丑陋的方式。

是否有类似的require使我能够加载JSON文件?


当前回答

不。使用readFile或readFileSync(仅在启动时使用后者)。

或者使用现有的库

中信

或者把你的配置写在js文件中,而不是json文件

module.exports = {
  // json
}

其他回答

一个漂亮的非缓存异步一行,用于节点15模块:

import { readFile } from 'fs/promises';

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

如果你正在使用typescript,你可以添加你的tsconfig。为json添加一个名为resolveJsonModule: true的新字段,然后你可以像这样导入任何.json文件的所有信息:

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

其中最常见的两种

第一种方法:

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

let jsonData = require('./JsonFile') //如果我们省略.json也可以

OR

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将总是重新读取文件,并获得更改

你甚至可以在不指定. JSON扩展名的情况下使用JSON的require。 它将允许您将文件扩展名更改为.js,而无需对导入进行任何更改。

假设我们有。/myJsonFile。Json在同一目录下。

const data = require('./myJsonFile')

如果在未来你会改变。/myJsonFile。./myJsonFile.js导入过程中没有任何改变。

JSON文件不需要显式的exports语句。您不需要导出它来作为Javascript文件使用。

因此,对于有效的JSON文档,可以使用require。

data.json

{
  "name": "Freddie Mercury"
}

main.js

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

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