使用Node.JS,我如何读取(服务器)内存的JSON对象?
背景
我正在做一些Node.js的实验,并希望从一个文本文件或一个.js文件(这是更好??)读取一个JSON对象到内存中,以便我可以从代码快速访问该对象。 我意识到在那里有Mongo,Alfred等东西,但这不是我现在需要的东西。
题
如何使用JavaScript / Node从文本或js文件读取JSON对象并将其读入服务器内存?
同步:
var fs = require('fs'); var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
asynchronous:
var fs = require('fs'); var obj; fs.readFile('file', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); });
我发现最简单的方法就是使用require
和JSON文件的path。
例如,假设您有以下JSON文件。
test.json
{ "firstName": "Joe", "lastName": "Smith" }
然后,您可以使用require
在node.js应用程序中轻松加载
var config = require('./test.json'); console.log(config.firstName + ' ' + config.lastName);
asynchronous是有原因的! 在@mihai扔石头
否则,以下是他用于asynchronous版本的代码:
// 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 }
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfile_file_options_callback
var fs = require('fs'); fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); }); // options fs.readFile('/etc/passwd', 'utf8', callback);
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfilesync_file_options
您可以在文件系统文档中findNode.js的所有用法!
希望对你有所帮助!
在节点8中,您可以使用内置的util.promisify()
来asynchronous读取这样的文件
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 })
如果您正在寻找一个完整的解决scheme,以Async
加载Relative Path
的JSON文件与error handling
// Global variables // Request path module for relative path const path = require('path') // Request File System Module var fs = require('fs'); // GET request for the /list_user page. router.get('/listUsers', function (req, res) { console.log("Got a GET request for list of users"); // Create a relative path URL let reqPath = path.join(__dirname, '../mock/users.json'); //Read JSON from relative path of this file fs.readFile(reqPath , 'utf8', function (err, data) { //Handle Error if(!err) { //Handle Success console.log("Success"+data); // Parse Data to JSON OR var jsonObj = JSON.parse(data) //Send back as Response res.end( data ); }else { //Handle Error res.end("Error: "+err ) } }); })
目录结构:
至less在Node v8.9.1中,你可以这样做
var json_data = require('/path/to/local/file.json');
并访问JSON对象的所有元素。