Príklad výnimky s JSON v JavaScripte
Povedzme, že k nám z externého sveta prichádza JSON s produktom:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Už viete, že metóda JSON.parse bude
vyhadzovať výnimku, ak JSON je nekorektný.
Poďme chytiť túto výnimku:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// nejako reagujeme na výnimku
}
Avšak, môže nastať situácia, kedy samotný JSON je korektný, ale neobsahuje potrebné pole, napríklad, chýba pole s cenou:
let json = '{"product": "apple", "amount": 5}'; // nie je cena
Povedzme, že to je tiež výnimková situácia a v takom prípade budeme vyhadzovať vlastnú užívateľskú výnimku:
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: 'chýba cena alebo množstvo produktu'
};
}
} catch (error) {
// nejako reagujeme na výnimku
}
Teraz blok catch bude dostávať dva typy
výnimiek: buď JSON je úplne nekorektný,
a potom bude výnimka typu SyntaxError,
alebo JSON je korektný, ale neobsahuje potrebné
pole, a potom bude výnimka typu
ProductCostError.
Poďme v bloku catch zachytávať tieto
typy výnimiek:
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: 'chýba cena alebo množstvo produktu'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Nekorektný JSON produktu');
} else if (error.name == 'ProductCostError') {
alert('Produktu chýba cena alebo množstvo');
}
}
Povedzme, že k vám prichádza JSON takéhoto druhu:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Skontrolujte tento JSON na všeobecnú korektnosť pri parsovaní, a po parsovaní skontrolujte, že výsledkom je pole, a nie niečo iné. Ak výsledkom nie je pole - vyhoďte výnimku.