我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。
require
readFileSync
__dirname
是否有类似的require使我能够加载JSON文件?
不。使用readFile或readFileSync(仅在启动时使用后者)。
readFile
或者使用现有的库
或者把你的配置写在js文件中,而不是json文件
module.exports = { // json }
从节点v0.5开始。是的,你可以需要你的JSON,就像你需要一个js文件。
var someObject = require('./somefile.json')
在ES6:
import someObject from './somefile.json'
JSON文件不需要显式的exports语句。您不需要导出它来作为Javascript文件使用。
因此,对于有效的JSON文档,可以只使用require。
data.json
{ "name": "Freddie Mercury" }
main.js
var obj = require('data.json'); console.log(obj.name); //Freddie Mercury
假设我们在同一个目录中有。/ myJsonFile.json。
const data = require('./myJsonFile')
如果将来将。/ myJsonFile.json更改为。/ myJsonFile.js,则导入中不应更改任何内容。
其中最常见的两种
第一种方法:
let jsonData = require('./JsonFile.json')
let jsonData = require('./JsonFile') //如果省略.json也可以
let jsonData = require('./JsonFile')
或
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) })
2) fs。readFile或fs。readFileSync将总是重新读取文件,并获得更改
你可以使用node.js v14 experimental json modules标志来导入json文件。更多细节在这里
file.js
import data from './folder/file.json' assert { type: 'json' } export default { foo () { console.log(data) } }
你用node --experimental-json-modules file.js来调用它
node --experimental-json-modules file.js
一个漂亮的非缓存异步一行,用于节点15模块:
import { readFile } from 'fs/promises'; const data = await readFile('\{\{ path }}').then(json => JSON.parse(json)).catch(() => null);
您可以使用模块来创建一个require。
import { createRequire } from 'module' const require = createRequire(import.meta.url) const foo = require('./foo.json')
如果你是使用打印稿,你可以只添加你的tsconfig.json一个名为resolveJsonModule:真的新字段,然后你可以像这样导入任何.json文件的所有信息:
import * as jsonfile from "./path/to/json"