我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。
如果我想要包含其他JavaScript文件,我只需使用require
即可。
现在我使用readFileSync
和__dirname
来获取JSON,我认为这是一种难看的方式。
是否存在类似于require的内容,使我能够加载JSON文件?
答案 0 :(得分:376)
从节点v0.5.x开始,您可以像需要js文件那样需要JSON。
var someObject = require('./somefile.json')
在ES6中:
import someObject from ('./somefile.json')
答案 1 :(得分:23)
JSON文件不需要显式的exports语句。您不需要导出即可将其用作Javascript文件。
因此,您只能使用require
获取有效的JSON文档。
data.json
{
"name": "Freddie Mercury"
}
main.js
var obj = require('data.json');
console.log(obj.name);
//Freddie Mercury
答案 2 :(得分:18)
没有。使用readFile
或readFileSync
(后者仅在启动时)。
或使用像
这样的现有库或者在js文件中编写配置,而不是像
那样编写json文件module.exports = {
// json
}
答案 3 :(得分:5)
一个用于 node 15 模块的漂亮的非缓存异步单行:
import { readFile } from 'fs/promises';
const data = await readFile('{{ path }}').then(json => JSON.parse(json)).catch(() => null);
答案 4 :(得分:4)
最常见的两个
第一种方式:
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将始终重新读取文件并进行更改
答案 5 :(得分:2)
您甚至可以使用JSON的 require ,而无需指定扩展名 .json 。 它将使您将文件扩展名更改为 .js ,而无需更改导入。
假设我们在同一目录中有 ./ myJsonFile.json 。
const data = require('./myJsonFile')
如果将来您将 ./ myJsonFile.json 更改为 ./ myJsonFile.js ,则导入过程中无需进行任何更改。
答案 6 :(得分:2)
您可以使用node.js v14实验性json模块标志导入json文件。更多详细信息here
file.js
import data from './folder/file.json'
export default {
foo () {
console.log(data)
}
}
您用node --experimental-json-modules file.js
答案 7 :(得分:0)
您可以使用模块来创建需求。
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const foo = require('./foo.js')
答案 8 :(得分:0)
如果您使用打字稿,您只需在您的 tsconfig.json 中添加一个名为 resolveJsonModule: true 的新字段,然后您可以像这样导入任何 .json 文件的所有信息:
import * as jsonfile from "./path/to/json"