Probleme mit anderen Antworten:
- unsicher
JSON.parse
- Keine Überprüfung des Antwortcodes
Alle Antworten hier werden JSON.parse()
auf unsichere Weise verwendet . Sie sollten immer alle Aufrufe JSON.parse()
in einen try/catch
Block einfügen, insbesondere wenn Sie JSON analysieren, das von einer externen Quelle stammt, wie Sie es hier tun.
Sie können request
den JSON automatisch analysieren, was hier in anderen Antworten nicht erwähnt wurde. Es gibt bereits eine Antwort mit dem request
Modul, aber es wird verwendet JSON.parse()
, um JSON manuell zu analysieren. Dies sollte immer innerhalb eines try {} catch {}
Blocks ausgeführt werden, um Fehler mit falschem JSON zu behandeln, da sonst die gesamte App abstürzt. Und falsches JSON passiert, vertrau mir.
Andere Antworten, die verwendet werden, werden http
ebenfalls verwendet, JSON.parse()
ohne nach Ausnahmen zu suchen, die auftreten und Ihre Anwendung zum Absturz bringen können.
Im Folgenden werde ich einige Möglichkeiten zeigen, wie Sie sicher damit umgehen können.
Alle Beispiele verwenden eine öffentliche GitHub-API, damit jeder diesen Code sicher ausprobieren kann.
Beispiel mit request
Hier ist ein Arbeitsbeispiel, mit request
dem JSON automatisch analysiert wird:
'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);
}
});
Beispiel mit http
undtry/catch
Dies verwendet https
- ändern Sie einfach https
zu, http
wenn Sie HTTP-Verbindungen möchten:
'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);
});
Beispiel mit http
undtryjson
Dieses Beispiel ähnelt dem obigen, verwendet jedoch das tryjson
Modul. (Haftungsausschluss: Ich bin der Autor dieses Moduls.)
'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);
});
Zusammenfassung
Das verwendete Beispiel request
ist das einfachste. Wenn Sie es jedoch aus irgendeinem Grund nicht verwenden möchten, denken Sie daran, immer den Antwortcode zu überprüfen und JSON sicher zu analysieren.