他の回答の問題:
- 安全でない
JSON.parse
- 応答コードのチェックなし
ここでのすべての回答JSON.parse()
は、安全でない方法で使用されています。ここで行っているように、特に外部ソースからの JSON を解析する場合JSON.parse()
は、常にすべての呼び出しをtry/catch
ブロックに入れる必要があります。
request
ここでは他の回答で言及されていないJSONを自動的に解析するために使用できます。request
モジュールを使用した回答は既にありますがJSON.parse()
、手動で JSON を解析するために使用されます。間違った JSON のエラーを処理するには、常にブロック内で実行する必要がありtry {} catch {}
ます。そうしないと、アプリ全体がクラッシュします。そして、間違った 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
これは使用します-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 を安全に解析することを忘れないでください。