在node.js中是否需要json

时间:2011-08-23 14:56:24

标签: json node.js require

我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。

如果我想要包含其他JavaScript文件,我只需使用require即可。 现在我使用readFileSync__dirname来获取JSON,我认为这是一种难看的方式。

是否存在类似于require的内容,使我能够加载JSON文件?

9 个答案:

答案 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)

没有。使用readFilereadFileSync(后者仅在启动时)。

或使用像

这样的现有库

或者在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"