Voorbeeld van uitzondering met JSON in JavaScript
Stel dat er van ergens uit de externe wereld een JSON met een product bij ons aankomt:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Je weet al dat de methode JSON.parse
een uitzondering zal throwen als de JSON ongeldig is.
Laten we deze uitzondering vangen:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// reageer op de een of andere manier op de uitzondering
}
Het kan echter zijn dat de JSON zelf geldig is, maar niet de benodigde velden bevat, bijvoorbeeld ontbreekt het prijsveld:
let json = '{"product": "apple", "amount": 5}'; // geen prijs
Laten we zeggen dat dit ook een uitzonderlijke situatie is en in dat geval onze eigen gebruikersgedefinieerde uitzondering zullen throwen:
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: 'prijs of hoeveelheid van product ontbreekt'
};
}
} catch (error) {
// reageer op de een of andere manier op de uitzondering
}
Nu zal het catch-blok twee typen
uitzonderingen ontvangen: ofwel is de JSON helemaal ongeldig,
en dan is er een uitzondering van het type SyntaxError,
ofwel is de JSON geldig, maar bevat niet de benodigde
velden, en dan is er een uitzondering van het type
ProductCostError.
Laten we in het catch-blok deze
typen uitzonderingen afvangen:
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: 'prijs of hoeveelheid van product ontbreekt'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Ongeldige product-JSON');
} else if (error.name == 'ProductCostError') {
alert('Prijs of hoeveelheid van product ontbreekt');
}
}
Stel dat er een JSON van het volgende type bij je aankomt:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Controleer deze JSON op algemene geldigheid bij het parsen, en controleer na het parsen of het resultaat een array is, en niet iets anders. Als het resultaat geen array is - throw dan een uitzondering.