您只需使用JSON.parse
。
JSON
对象的定义是 ECMAScript 5 规范的一部分 。 node.js 建立在谷歌 Chrome 的V8引擎上,符合 ECMA 标准。因此,node.js 还有一个全局对象JSON
[docs] 。
注 - JSON.parse
可以绑定当前线程,因为它是一个同步方法。因此,如果您计划解析大型 JSON 对象,请使用流式 json 解析器。
你可以要求 .json 文件。
var parsedJSON = require('./file-name');
例如,如果您在源代码文件所在的目录中有config.json
文件,则可以使用:
var config = require('./config.json');
或(文件扩展名可以省略):
var config = require('./config');
请注意, require
是同步的 ,只读取文件一次 ,后面的调用返回缓存中的结果
另请注意,您应该仅在绝对控制下将其用于本地文件,因为它可能会执行文件中的任何代码。
您可以使用JSON.parse()
。
您应该能够在任何兼容ECMAScript 5 的 JavaScript 实现上使用JSON
对象。构建 Node.js 的V8就是其中之一。
注意:如果您使用 JSON 文件来存储敏感信息(例如密码),那么这是错误的方法。了解 Heroku 如何做到这一点: https : //devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application 。了解您的平台如何做到这一点,并使用
process.env
从代码中检索配置变量。
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
您将不得不使用fs
模块执行一些文件操作。
var fs = require('fs');
fs.readFile('/path/to/file.json', 'utf8', function (err, data) {
if (err) throw err; // we'll not consider error handling for now
var obj = JSON.parse(data);
});
var fs = require('fs');
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));
require
吗?再想想! var obj = require('path/to/file.json');
但是,我不建议这样做有几个原因:
require
是同步的。如果你有一个非常大的 JSON 文件,它会阻塞你的事件循环。你真的需要在fs.readFile
使用JSON.parse
。 require
只会读取一次文件。后续调用require
为同一个文件会返回一个缓存副本。如果您想要读取不断更新的.json
文件,这不是一个好主意。你可以使用黑客攻击 。但在这一点上,简单地使用fs
更容易。 .json
扩展名,则require
不会将该文件的内容视为 JSON。 认真!使用JSON.parse
。
load-json-file
模块如果你正在阅读大量的.json
文件,(如果你非常懒惰的话),每次编写样板代码都会很烦人。您可以使用load-json-file
模块保存一些字符。
const loadJsonFile = require('load-json-file');
loadJsonFile('/path/to/file.json').then(json => {
// `json` contains the parsed object
});
let obj = loadJsonFile.sync('/path/to/file.json');
如果 JSON 内容通过网络流式传输,则需要使用流式 JSON 解析器。否则它将占用您的处理器并阻塞您的事件循环,直到 JSON 内容完全流式传输。
如果您不确定传递给JSON.parse()
是否是有效的 JSON ,请确保在try/catch
块中包含对JSON.parse()
的调用。用户提供的 JSON 字符串可能会导致应用程序崩溃,甚至可能导致安全漏洞。如果解析外部提供的 JSON,请确保完成错误处理。