我应该如何使用 Node.js 解析 JSON?是否有一些module可以安全地验证和解析 JSON?
如何使用 Node.js 解析 JSON?
您可以简单地使用JSON.parse
.
JSON
对象的定义是 ECMAScript 5 规范的一部分。node.js 建立在 Google Chrome 的V8引擎之上,它遵循 ECMA 标准。因此,node.js 也有一个全局对象[docs]。JSON
注意 -JSON.parse
可以占用当前线程,因为它是一种同步方法。因此,如果您打算解析大型 JSON 对象,请使用流式 json 解析器。
你可以要求.json 文件。
var parsedJSON = require('./file-name');
例如,如果您config.json
在源代码文件所在的目录中有一个文件,您将使用:
var config = require('./config.json');
或(文件扩展名可以省略):
var config = require('./config');
请注意,这require
是同步的并且只读取一次文件,随后的调用从缓存中返回结果
另请注意,您应该仅将它用于您绝对控制下的本地文件,因为它可能会执行文件中的任何代码。
您可以使用JSON.parse()
.
您应该能够JSON
在任何ECMAScript 5兼容的 JavaScript 实现上使用该对象。而V8就是其中之一,Node.js 是基于它构建的。
注意:如果您使用 JSON 文件来存储敏感信息(例如密码),那是错误的做法。看看 Heroku 是如何做到的:https : //devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application。了解您的平台是如何做到的,并用于
process.env
从代码中检索配置变量。
解析包含 JSON 数据的字符串
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
解析包含 JSON 数据的文件
您必须对fs
module进行一些文件操作。
异步版本
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 文件,它会阻塞您的事件循环。你真的需要使用JSON.parse
withfs.readFile
。require
将只读取文件一次。require
对同一文件的后续调用将返回缓存副本。如果您想读取.json
不断更新的文件,这不是一个好主意。你可以使用hack。但在这一点上,简单地使用fs
.- 如果您的文件没有
.json
扩展名,require
则不会将文件内容视为 JSON。
严重地!使用JSON.parse
.
load-json-file
module
如果您正在阅读大量.json
文件(并且如果您非常懒惰),则每次编写样板代码都会变得很烦人。您可以使用该load-json-file
module保存一些字符。
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 内容完全流式传输。
错误处理/安全
如果您不确定,如果任何传递给JSON.parse()
是有效的JSON,请确保调用封装到JSON.parse()
一个内部try/catch
块。用户提供的 JSON 字符串可能会使您的应用程序崩溃,甚至可能导致安全漏洞。如果您解析外部提供的 JSON,请确保已完成错误处理。
使用JSON 对象:
JSON.parse(str);
JSON.parse 的另一个例子:
var fs = require('fs');
var file = __dirname + '/config.json';
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
data = JSON.parse(data);
console.dir(data);
});