⊗jsSpExcJSE 149 of 294 menu

JavaScriptにおけるJSONの例外処理の例

外部から、ある製品のJSONデータが渡されるとします:

let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount);

JSONが不正な場合、JSON.parseメソッドが例外をスローすることは既にご存知でしょう。 この例外をキャッチしてみましょう:

try { let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount); } catch (error) { // 例外への対処 }

しかし、JSON自体は正しい形式であっても、必要なフィールドが含まれていない場合があります。 例えば、価格フィールドがない場合です:

let json = '{"product": "apple", "amount": 5}'; // 価格がない

これも例外的な状況であると言い、このような場合には独自のユーザー定義例外をスローすることにしましょう:

try { let json = '{"product": "apple", "amount": 5}'; let product = JSON.parse(json); if (product.price !== undefined && product.amount !== undefined) { alert(product.price * product.amount); } else { throw { name: 'ProductCostError', message: '製品に価格または数量がありません' }; } } catch (error) { // 例外への対処 }

これで、catchブロックは2種類の例外を受け取るようになります: 1. JSON全体が不正な場合のSyntaxError型の例外、 2. JSONは正しい形式だが必要なフィールドがない場合のProductCostError型の例外です。

catchブロックで、これらの例外タイプを判別して処理しましょう:

try { let json = '{"product": "apple", "amount": 5}'; let product = JSON.parse(json); if (product.price !== undefined && product.amount !== undefined) { alert(product.price * product.amount); } else { throw { name: 'ProductCostError', message: '製品に価格または数量がありません' }; } } catch (error) { if (error.name == 'SyntaxError') { alert('製品のJSONが不正です'); } else if (error.name == 'ProductCostError') { alert('製品に価格または数量がありません'); } }

次のような形式のJSONが渡されるとします:

let json = `[ { "name": "user1", "age": 25, "salary": 1000 }, { "name": "user2", "age": 26, "salary": 2000 }, { "name": "user3", "age": 27, "salary": 3000 } ]`;

このJSONをパースする際に全体の正当性を検証し、パース後に結果が配列であるかどうかを確認してください。 結果が配列でない場合は例外をスローしてください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否