出身背景

我正在使用Node.js进行一些实验,希望将JSON对象从文本文件或.js文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像蒙哥、阿尔弗雷德等这样的东西,但这不是我现在需要的。

问题

如何使用JavaScript/Node从文本或js文件中读取JSON对象并将其写入服务器内存?


当前回答

在节点8中,可以使用内置的util.provisify()异步读取如下文件

const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)

readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'})
  .then(contents => {
    const obj = JSON.parse(contents)
    console.log(obj)
  })
  .catch(error => {
    throw error
  })

其他回答

至少在Node v8.9.1中,您可以

var json_data=require('/path/to/local/file.json');

并访问JSON对象的所有元素。

使用v8导入断言回答2022

import jsObject from "./test.json" assert { type: "json" };
console.log(jsObject)

动态导入

const jsObject = await import("./test.json", {assert: { type: "json" }});
console.log(jsObject);

更多信息请访问:v8导入断言

在节点8中,可以使用内置的util.provisify()异步读取如下文件

const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)

readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'})
  .then(contents => {
    const obj = JSON.parse(contents)
    console.log(obj)
  })
  .catch(error => {
    throw error
  })

这么多答案,从来没有人做过比较同步与异步与需求的基准。我在这里描述了通过require、readFileSync和readFile在内存中读取json的不同用例。

同步:

var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));

异步:

var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
});