首页 文章

使用Node.JS,如何将JSON对象读入(服务器)内存?

提问于
浏览
441

背景

我正在对Node.js进行一些实验,并希望从文本文件或.js文件(更好的??)中读取JSON对象到内存中,以便我可以从代码中快速访问该对象 . 我意识到那里有Mongo,Alfred等东西,但这不是我现在所需要的 .

问题

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

7 回答

  • 7

    同步:

    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);
    });
    
  • -2

    我发现这样做的最简单方法是使用 require 和JSON文件的路径 .

    例如,假设您有以下JSON文件 .

    test.json

    {
      "firstName": "Joe",
      "lastName": "Smith"
    }
    

    然后,您可以使用 require 在node.js应用程序中轻松加载它

    var config = require('./test.json');
    console.log(config.firstName + ' ' + config.lastName);
    
  • 320

    异步是有原因的!在@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
    }
    
  • 19

    至少在Node v8.9.1中,你可以做到

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

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

  • 1

    在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
      })
    
  • 53

    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

    You can find all usage of Node.js at the File System docs!
    希望对你有所帮助!

  • 902

    If you are looking for a complete solution for Async loading a JSON file from Relative Path with 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 )
            }
       });
    })
    

    Directory Structure:

    enter image description here

相关问题