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.