我想在我的JavaScript代码中包含与我的JavaScript源文件在同一目录中的几个JSON文件。
如果我想包含另一个JavaScript文件,可以直接使用require
。现在,我正在使用readFileSync
和__dirname
获取JSON,我认为这是执行此操作的丑陋方法。
是否有类似的要求,使我能够加载JSON文件?
我想在我的JavaScript代码中包含与我的JavaScript源文件在同一目录中的几个JSON文件。
如果我想包含另一个JavaScript文件,可以直接使用require
。现在,我正在使用readFileSync
和__dirname
获取JSON,我认为这是执行此操作的丑陋方法。
是否有类似的要求,使我能够加载JSON文件?
Answers:
从节点v0.5.x开始,是的,您可以像需要js文件一样要求JSON。
var someObject = require('./somefile.json')
在ES6中:
import someObject from ('./somefile.json')
.json
似乎很重要
否。无论是使用readFile
还是readFileSync
(后者仅在启动时使用)。
或使用现有的库
或者将您的配置写入js文件,而不是json文件,例如
module.exports = {
// json
}
__dirname
相对路径。
最常见的两种
第一种方式:
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将始终重新读取文件并进行更改
您甚至可以使用JSON的require而无需指定扩展名.json。它将使您将文件扩展名更改为.js,而导入中没有任何更改。
假设我们在同一目录中有./myJsonFile.json。
const data = require('./myJsonFile')
如果将来您将./myJsonFile.json更改为./myJsonFile.js,则导入时无需进行任何更改。