出身背景
我正在使用Node.js进行一些实验,希望将JSON对象从文本文件或.js文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像蒙哥、阿尔弗雷德等这样的东西,但这不是我现在需要的。
问题
如何使用JavaScript/Node从文本或js文件中读取JSON对象并将其写入服务器内存?
出身背景
我正在使用Node.js进行一些实验,希望将JSON对象从文本文件或.js文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像蒙哥、阿尔弗雷德等这样的东西,但这不是我现在需要的。
问题
如何使用JavaScript/Node从文本或js文件中读取JSON对象并将其写入服务器内存?
当前回答
这么多答案,从来没有人做过比较同步与异步与需求的基准。我在这里描述了通过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);
});
异步是有原因的!向@mihai扔石头
否则,以下是他在异步版本中使用的代码:
// Declare variables
var fs = require('fs'),
obj
// Read the file and send to the callback
fs.readFile('path/to/file', handleFile)
// Write the callback function
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
// You can now play with your datas
}
使用fs extra包非常简单:
同步:
const fs = require('fs-extra')
const packageObj = fs.readJsonSync('./package.json')
console.log(packageObj.version)
异步:
const fs = require('fs-extra')
const packageObj = await fs.readJson('./package.json')
console.log(packageObj.version)
2022年答案,使用ES6模块语法和async/await
在现代JavaScript中,这可以作为一行代码完成,而无需安装其他包:
import { readFile } from 'fs/promises';
let data = JSON.parse(await readFile("filename.json", "utf8"));
根据需要添加try/catch块来处理异常。
至少在Node v8.9.1中,您可以
var json_data=require('/path/to/local/file.json');
并访问JSON对象的所有元素。