⊗jsSpExcJSE 149 of 294 menu

Beispiel einer Ausnahme mit JSON in JavaScript

Angenommen, von irgendwoher aus der externen Welt kommt ein JSON mit einem Produkt:

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

Sie wissen bereits, dass die Methode JSON.parse eine Ausnahme werfen wird, wenn das JSON ungültig ist. Lassen Sie uns diese Ausnahme abfangen:

try { let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount); } catch (error) { // irgendwie auf die Ausnahme reagieren }

Es kann jedoch vorkommen, dass das JSON selbst gültig ist, aber nicht die benötigten Felder enthält, zum Beispiel fehlt das Feld für den Preis:

let json = '{"product": "apple", "amount": 5}'; // kein Preis

Nehmen wir an, dass dies ebenfalls eine Ausnahmesituation ist und wir in einem solchen Fall unsere eigene benutzerdefinierte Ausnahme werfen werden:

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: 'Preis oder Menge des Produkts fehlt' }; } } catch (error) { // irgendwie auf die Ausnahme reagieren }

Nun erhält der Block catch zwei Arten von Ausnahmen: Entweder ist das JSON generell ungültig, dann wird es eine Ausnahme vom Typ SyntaxError geben, oder das JSON ist gültig, enthält aber nicht die benötigten Felder, und dann wird es eine Ausnahme vom Typ ProductCostError geben.

Lassen Sie uns im Block catch diese Ausnahmetypen abfangen:

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: 'Preis oder Menge des Produkts fehlt' }; } } catch (error) { if (error.name == 'SyntaxError') { alert('Ungültiges Produkt-JSON'); } else if (error.name == 'ProductCostError') { alert('Dem Produkt fehlt der Preis oder die Menge'); } }

Angenommen, ein JSON folgender Art kommt bei Ihnen an:

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

Überprüfen Sie dieses JSON auf allgemeine Gültigkeit beim Parsen, und prüfen Sie nach dem Parsen, ob das Ergebnis ein Array ist und nicht etwas anderes. Wenn das Ergebnis kein Array ist - werfen Sie eine Ausnahme.

huesazptsv