Příklad výjimky s JSON v JavaScriptu
Předpokládejme, že k nám z vnějšího světa přichází JSON s produktem:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Už víte, že metoda JSON.parse bude
vyhazovat výjimku, pokud JSON není korektní.
Pojďme tuto výjimku zachytit:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// nějak reagujeme na výjimku
}
Může se však stát, že samotný JSON je korektní, ale neobsahuje potřebná pole, například chybí pole s cenou:
let json = '{"product": "apple", "amount": 5}'; // není cena
Řekněme, že to je také výjimečná situace a v takovém případě budeme vyhazovat vlastní uživatelskou výjimku:
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: 'chybí cena nebo množství produktu'
};
}
} catch (error) {
// nějak reagujeme na výjimku
}
Nyní bude blok catch zachytávat dva typy
výjimek: buď je JSON obecně nekorektní,
a pak bude výjimka typu SyntaxError,
nebo je JSON korektní, ale neobsahuje potřebná
pole, a pak bude výjimka typu
ProductCostError.
Pojďme v bloku catch tyto typy výjimek zachytávat:
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: 'chybí cena nebo množství produktu'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Nekorektní JSON produktu');
} else if (error.name == 'ProductCostError') {
alert('Produktu chybí cena nebo množství');
}
}
Předpokládejme, že k vám přichází JSON tohoto druhu:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Zkontrolujte tento JSON na obecnou korektnost při parsování, a po parsování zkontrolujte, že výsledkem je pole, a ne něco jiného. Pokud výsledkem není pole - vyhoďte výjimku.