其他答案有问题:
这里所有的答案都JSON.parse()
以不安全的方式使用。您应该始终将所有调用JSON.parse()
放在一个try/catch
块中,尤其是当您解析来自外部源的JSON时,就像您在此处所做的那样。
您可以使用它request
来自动解析JSON,其他答案在此处未提到。已经有一个使用request
模块的答案,但它用于JSON.parse()
手动解析JSON-应该始终在一个try {} catch {}
块内运行以处理不正确的JSON错误,否则整个应用程序将崩溃。发生错误的JSON,请相信我。
使用的其他答案http
也可以在JSON.parse()
不检查可能发生的异常并使应用程序崩溃的情况下使用。
下面,我将介绍几种安全处理方式。
所有示例均使用公共GitHub API,因此每个人都可以安全地尝试该代码。
例子 request
这是一个request
自动解析JSON的工作示例:
'use strict';
var request = require('request');
var url = 'https://api.github.com/users/rsp';
request.get({
url: url,
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data) => {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
console.log(data.html_url);
}
});
http
和的示例try/catch
这使用https
-如果需要HTTP连接,只需更改https
为http
:
'use strict';
var https = require('https');
var options = {
host: 'api.github.com',
path: '/users/rsp',
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
try {
var data = JSON.parse(json);
console.log(data.html_url);
} catch (e) {
console.log('Error parsing JSON!');
}
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
http
和的示例tryjson
此示例与上面的示例类似,但是使用了该tryjson
模块。(免责声明:我是该模块的作者。)
'use strict';
var https = require('https');
var tryjson = require('tryjson');
var options = {
host: 'api.github.com',
path: '/users/rsp',
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
var data = tryjson.parse(json);
console.log(data ? data.html_url : 'Error parsing JSON!');
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
概要
使用的示例request
是最简单的。但是,如果由于某些原因您不想使用它,请记住始终检查响应代码并安全地解析JSON。