我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。
如果我想要包含另一个JavaScript文件,我可以简单地使用require
。现在我正在使用readFileSync
和__dirname
来获取JSON,我认为这是一种丑陋的方式。
是否有类似的要求,使我能够加载JSON文件?
从节点v0.5.x开始,您可以像需要js文件那样需要JSON。
var someObject = require('./somefile.json')
在ES6中:
import someObject from ('./somefile.json')
JSON文件不需要显式的export语句。您无需导出即可将其用作Javascript文件。
因此,您只需使用require
作为有效的JSON文档。
data.json
{
"name": "Freddie Mercury"
}
main.js
var obj = require('data.json');
console.log(obj.name);
//Freddie Mercury
不可以。使用readFile
或readFileSync
(后者仅在启动时)。
或者使用现有的库
或者在js文件中编写配置,而不是像json文件
module.exports = {
// json
}
两个最常见的
第一种方式:
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,则导入中不应更改任何内容。