使用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对象的所有元素。