出身背景

我正在使用Node.js进行一些实验,希望将JSON对象从文本文件或.js文件(哪个更好??)读取到内存中,以便我可以从代码中快速访问该对象。我意识到有像蒙哥、阿尔弗雷德等这样的东西,但这不是我现在需要的。

问题

如何使用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);
});

其他回答

使用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) 

如果您正在寻找异步加载JSON文件的完整解决方案,请使用错误处理从相对路径加载JSON文件

  // 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 )
        }
   });
})

目录结构:

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

使用v8导入断言回答2022

import jsObject from "./test.json" assert { type: "json" };
console.log(jsObject)

动态导入

const jsObject = await import("./test.json", {assert: { type: "json" }});
console.log(jsObject);

更多信息请访问:v8导入断言