我应该如何使用Node.js解析JSON ?是否有一些模块可以安全地验证和解析JSON ?
当前回答
正如这里提到的其他答案,你可能想要一个本地json文件,你知道是安全的,就像一个配置文件:
var objectFromRequire = require('path/to/my/config.json');
或者使用全局JSON对象将字符串值解析为对象:
var stringContainingJson = '\"json that is obtained from somewhere\"';
var objectFromParse = JSON.parse(stringContainingJson);
请注意,当您需要一个文件时,该文件的内容会被评估,如果它不是json文件而是js文件,则会引入安全风险。
在这里,我发布了一个演示,你可以看到这两种方法,并在线使用它们(解析示例在app.js文件中-然后点击运行按钮,在终端中看到结果): http://staging1.codefresh.io/labs/api/env/json-parse-example
您可以修改代码并查看影响…
其他回答
为了安全起见,用这个吧
var data = JSON.parse(Buffer.concat(arr).toString());
我的解决方案:
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);
});
您可以要求.json文件。
var parsedJSON = require('./file-name');
例如,如果你有一个配置。Json文件在相同的目录作为你的源代码文件,你会使用:
var config = require('./config.json');
或(文件扩展名可以省略):
var config = require('./config');
注意require是同步的,只读取文件一次,后续调用从缓存返回结果
还要注意,您应该只对完全控制下的本地文件使用此选项,因为它可能会执行文件中的任何代码。
var fs = require('fs');
fs.readFile('ashish.json',{encoding:'utf8'},function(data,err) {
if(err)
throw err;
else {
console.log(data.toString());
}
})
正如在上面的答案中提到的,我们可以使用JSON.parse()将字符串解析为JSON 但是在解析之前,请确保解析正确的数据,否则可能会导致整个应用程序崩溃
这样使用是安全的
let parsedObj = {}
try {
parsedObj = JSON.parse(data);
} catch(e) {
console.log("Cannot parse because data is not is proper json format")
}