其他答案的问题:
这里的所有答案都JSON.parse()
以不安全的方式使用。您应该始终将所有调用JSON.parse()
放在一个try/catch
块中,尤其是当您解析来自外部源的 JSON 时,就像您在这里所做的那样。
您可以使用request
自动解析其他答案中未提及的 JSON。已经有一个使用request
module的答案,但它用于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 {
// data is already parsed as JSON:
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);
// 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
module。(免责声明:我是该module的作者。)
'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。