我应该如何使用Node.js解析JSON?是否有一些模块可以安全地验证和解析JSON?
如何使用Node.js解析JSON?
无需其他模块。
只是使用
var parsedObj = JSON.parse(yourObj);
我不认为与此有关的任何安全问题
如以上答案中所述,我们可以JSON.parse()
将字符串解析为JSON,但是在解析之前,请务必解析正确的数据,否则可能会导致整个应用程序崩溃
这样可以安全使用
let parsedObj = {}
try {
parsedObj = JSON.parse(data);
} catch(e) {
console.log("Cannot parse because data is not is proper json format")
}
为了安全起见,请使用它
var data = JSON.parse(Buffer.concat(arr).toString());
您可以使用JSON.parse()(这是一个内置函数,可能会迫使您使用try-catch语句包装它)。
或使用JSON解析npm库,例如json-parse-or
始终确保在try catch块中使用JSON.parse,因为如果json中有一些损坏的数据,则节点总是会引发意外错误,因此请使用此代码代替简单的JSON.Parse
try{
JSON.parse(data)
}
catch(e){
throw new Error("data is corrupted")
}
JSON.parse无法确保您解析的json字符串的安全。您应该查看json-safe-parse之类的库或类似的库。
从json-safe-parse npm页面:
JSON.parse很棒,但是它在JavaScript上下文中有一个严重的缺陷:它允许您覆盖继承的属性。如果您要从不受信任的来源(例如,用户)解析JSON,并在其上调用您希望存在的函数,这可能会成为问题。
JSON.parse("your string");
就这样。
这里的每个人都讲过JSON.parse,所以我想说些别的。有一个很棒的模块,可以与许多中间件连接,以使应用程序的开发变得更轻松,更好。中间件之一是bodyParser。它解析JSON,html表单等。还有一个仅用于JSON解析noop的特定中间件。
看一下上面的链接,它可能对您确实有帮助。
包括node-fs
库。
var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));
有关“ fs”库的更多信息,请参见位于http://nodejs.org/api/fs.html的文档。
由于您不知道您的字符串实际上是有效的,因此我将其放在try catch中。另外,由于try catch块未按节点进行优化,因此我会将整个内容放入另一个函数中:
function tryParseJson(str) {
try {
return JSON.parse(str);
} catch (ex) {
return null;
}
}
或以“异步样式”
function tryParseJson(str, callback) {
process.nextTick(function () {
try {
callback(null, JSON.parse(str));
} catch (ex) {
callback(ex)
}
})
}
我想提一下,全局JSON对象还有其他选择。
JSON.parse
并且JSON.stringify
都是同步的,因此如果您要处理大对象,则可能需要检出一些异步JSON模块。
看看:https : //github.com/joyent/node/wiki/Modules#wiki-parsers-json
您可以简单地使用JSON.parse
。
JSON
对象的定义是ECMAScript 5规范的一部分。node.js基于Google Chrome的V8引擎构建,该引擎遵循ECMA标准。因此,node.js也有一个全局对象[docs]。JSON
注意- JSON.parse
可以占用当前线程,因为它是一种同步方法。因此,如果您打算解析大型JSON对象,请使用流式JSON解析器。
使用JSON对象:
JSON.parse(str);
很简单,您可以使用将JSON转换为字符串
JSON.stringify(json_obj)
,并使用将字符串转换为JSONJSON.parse("your json string")
。