Coe*_*oen 219 json require node.js
我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中.
如果我想要包含另一个JavaScript文件,我可以简单地使用require
.现在我正在使用readFileSync
并__dirname
获得JSON,我认为这是一种丑陋的方式.
是否有类似的要求,使我能够加载JSON文件?
goa*_*ker 408
从节点v0.5.x开始,您可以像需要js文件那样需要JSON.
var someObject = require('./somefile.json')
在ES6中:
import someObject from ('./somefile.json')
ser*_*kan 30
JSON文件不需要显式的export语句.您无需导出即可将其用作Javascript文件.
因此,您只能使用require
有效的JSON文档.
data.json
{
"name": "Freddie Mercury"
}
Run Code Online (Sandbox Code Playgroud)
main.js
var obj = require('data.json');
console.log(obj.name);
//Freddie Mercury
Run Code Online (Sandbox Code Playgroud)
Ray*_*nos 19
不.使用readFile
或readFileSync
(后者仅在启动时).
或者使用现有的库
或者在js文件中编写配置,而不是像json文件
module.exports = {
// json
}
Run Code Online (Sandbox Code Playgroud)
最常见的两种
第一种方式:
let jsonData = require('./JsonFile.json')
Run Code Online (Sandbox Code Playgroud)
let jsonData = require('./JsonFile')
//如果我们省略.json也可以
要么
import jsonData from ('./JsonFile.json')
Run Code Online (Sandbox Code Playgroud)
第二种方式:
1)同步
const fs = require('fs')
let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))
Run Code Online (Sandbox Code Playgroud)
2)异步
const fs = require('fs')
let jsonData = {}
fs.readFile('JsonFile.json', 'utf-8', (err, data) => {
if (err) throw err
jsonData = JSON.parse(data)
})
Run Code Online (Sandbox Code Playgroud)
注意:1)如果我们更改了JsonFile.json,即使重新运行require('./ JsonFile.json'),也不会获得新数据。
2)fs.readFile或fs.readFileSync将始终重新读取文件并进行更改
您甚至可以使用JSON 的require而不指定扩展名.json。它可以让您将文件扩展名更改为.js,而无需对导入进行任何更改。
假设我们在同一目录中有./myJsonFile.json 。
const data = require('./myJsonFile')
Run Code Online (Sandbox Code Playgroud)
如果将来您将./myJsonFile.json更改为./myJsonFile.js,则导入中不应更改任何内容。
您可以使用 node.js v14 实验性 json 模块标志导入 json 文件。更多细节在这里
文件.js
import data from './folder/file.json'
export default {
foo () {
console.log(data)
}
}
Run Code Online (Sandbox Code Playgroud)
你用 node --experimental-json-modules file.js
一个用于 node 15 模块的漂亮的非缓存异步单行:
import { readFile } from 'fs/promises';
const data = await readFile('{{ path }}').then(json => JSON.parse(json)).catch(() => null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
175974 次 |
最近记录: |