我想在JavaScript代码中包含两个JSON文件,它们与JavaScript源文件位于同一目录中。如果我想包含另一个JavaScript文件,我可以简单地使用require。现在我使用readFileSync和__dirname来获取JSON,我认为这是一种丑陋的方法。是否有类似于require的东西使我能够加载JSON文件?
require
readFileSync
__dirname
pepwfjgg1#
从节点v0.5.x开始,可以像需要js文件一样需要JSON。var someObject = require('./somefile.json')在ES6中:import someObject from './somefile.json'
var someObject = require('./somefile.json')
import someObject from './somefile.json'
wsewodh22#
JSON文件不需要显式的exports语句,也不需要导出就可以作为Javascript文件使用。因此,对于有效的JSON文档,可以只使用require。
{ "name": "Freddie Mercury" }
var obj = require('data.json'); console.log(obj.name); //Freddie Mercury
rsaldnfx3#
最常见的两种先道:
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) })
注意:1)如果我们修改了JsonFile.json,我们不会得到新的数据,即使我们重新运行require('./JsonFile.json')2)readFile或fs.readFileSync将始终重新读取文件,并获取更改
k4ymrczo4#
否。使用readFile或readFileSync(后者仅在启动时使用)。或者使用现有库,如
readFile
或者将配置写入js文件,而不是像这样的json文件。
module.exports = { // json }
ssm49v7z5#
一个漂亮的非缓存async one liner,用于节点15模块:
import { readFile } from 'fs/promises'; const data = await readFile('{{ path }}').then(json => JSON.parse(json)).catch(() => null);
lpwwtiir6#
您可以使用node.js v14实验性json模块标志导入json文件。
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
mefy6pfw7#
您甚至可以使用JSON的require而不指定扩展名 .json。它将允许您将文件扩展名更改为 .js,而不会对导入进行任何更改。假设我们在同一个目录中有 *./myJsonFile.json *。
const data = require('./myJsonFile')
如果将来您要将 ./myJsonFile.json 更改为 ./myJsonFile.js,则导入时不应进行任何更改。
ruarlubt8#
您可以使用模块来创建require。
import { createRequire } from 'module' const require = createRequire(import.meta.url) const foo = require('./foo.json')
sqxo8psd9#
如果您正在使用typescript,则可以在tsconfig.json中添加一个名为resolveJsonModule的新字段:false,然后您可以导入任何.json文件的所有信息,如下所示:import * as jsonfile from "./path/to/json"
import * as jsonfile from "./path/to/json"
9条答案
按热度按时间pepwfjgg1#
从节点v0.5.x开始,可以像需要js文件一样需要JSON。
var someObject = require('./somefile.json')
在ES6中:
import someObject from './somefile.json'
wsewodh22#
JSON文件不需要显式的exports语句,也不需要导出就可以作为Javascript文件使用。
因此,对于有效的JSON文档,可以只使用
require
。rsaldnfx3#
最常见的两种
先道:
let jsonData = require('./JsonFile')
//如果我们省略.json也可以或
老二道:
1)同步地
2)异步地
注意:1)如果我们修改了JsonFile.json,我们不会得到新的数据,即使我们重新运行require('./JsonFile.json')
2)readFile或fs.readFileSync将始终重新读取文件,并获取更改
k4ymrczo4#
否。使用
readFile
或readFileSync
(后者仅在启动时使用)。或者使用现有库,如
或者将配置写入js文件,而不是像这样的json文件。
ssm49v7z5#
一个漂亮的非缓存async one liner,用于节点15模块:
lpwwtiir6#
您可以使用node.js v14实验性json模块标志导入json文件。
用
node --experimental-json-modules file.js
来表示mefy6pfw7#
您甚至可以使用JSON的require而不指定扩展名 .json。它将允许您将文件扩展名更改为 .js,而不会对导入进行任何更改。
假设我们在同一个目录中有 *./myJsonFile.json *。
如果将来您要将 ./myJsonFile.json 更改为 ./myJsonFile.js,则导入时不应进行任何更改。
ruarlubt8#
您可以使用模块来创建require。
sqxo8psd9#
如果您正在使用typescript,则可以在tsconfig.json中添加一个名为resolveJsonModule的新字段:false,然后您可以导入任何.json文件的所有信息,如下所示:
import * as jsonfile from "./path/to/json"