其他答案的问题:
这里的所有答案都JSON.parse()
以不安全的方式使用。您应该始终将所有调用JSON.parse()
放在一个try/catch
块中,尤其是当您解析来自外部源的 JSON 时,就像您在此处所做的那样。
您可以使用它request
来自动解析其他答案中未提及的 JSON。已经有一个使用request
模块的答案,但它用于JSON.parse()
手动解析 JSON - 它应该始终在块内运行try {} catch {}
以处理不正确 JSON 的错误,否则整个应用程序将崩溃。并且发生了不正确的 JSON,相信我。
其他使用的答案http
也使用JSON.parse()
而不检查可能发生的异常并使您的应用程序崩溃。
下面我将展示几种安全处理它的方法。
所有示例都使用公共 GitHub API,因此每个人都可以安全地尝试该代码。
示例request
这是一个自动解析 JSON 的工作示例request
:
'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 {
// data is already parsed as JSON:
console.log(data.html_url);
}
});
http
带有和的示例try/catch
这使用-如果您想要 HTTP 连接https
,只需更改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);
// data is available here:
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。