背景
我正在对 Node.js 进行一些实验,并希望将 JSON 对象从文本文件或 .js 文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像 Mongo、Alfred 等这样的东西,但这不是我现在需要的。
问题
如何使用 JavaScript/Node 从文本或 js 文件中读取 JSON 对象并读取到服务器内存中?
我正在对 Node.js 进行一些实验,并希望将 JSON 对象从文本文件或 .js 文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像 Mongo、Alfred 等这样的东西,但这不是我现在需要的。
如何使用 JavaScript/Node 从文本或 js 文件中读取 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);
});
我发现最简单的方法是使用require
JSON 文件的路径。
例如,假设您有以下 JSON 文件。
测试文件
{
"firstName": "Joe",
"lastName": "Smith"
}
然后,您可以使用 require
var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
异步是有原因的!向@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
}
至少在 Node v8.9.1 中,你可以这样做
var json_data = require('/path/to/local/file.json');
并访问 JSON 对象的所有元素。
在 Node 8 中,您可以使用内置util.promisify()
来异步读取这样的文件
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
})