Primer izuzetka sa JSON u JavaScript
Neka nam odnekud iz spoljnog sveta stigne JSON sa proizvodom:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Već znate da će metoda JSON.parse
baciti izuzetak ako JSON nije korektan.
Uhvatimo taj izuzetak:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// nekako reagujemo na izuzetak
}
Međutim, može se desiti da je sam po sebi JSON korektan, ali ne sadrži polja koja su nam potrebna, na primer, nema polja sa cenom:
let json = '{"product": "apple", "amount": 5}'; // nema cene
Recimo da je ovo takođe izuzetna situacija i u takvom slučaju ćemo bacati sopstveni korisnički izuzetak:
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: 'nedostaje cena ili količina proizvoda'
};
}
} catch (error) {
// nekako reagujemo na izuzetak
}
Sada će blok catch primati dva tipa
izuzetaka: ili je JSON uopšte nekorektan,
i tada će biti izuzetak tipa SyntaxError,
ili je JSON korektan, ali ne sadrži potrebna
nam polja, i tada će biti izuzetak tipa
ProductCostError.
Uhvatimo ove tipove izuzetaka u bloku catch:
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: 'nedostaje cena ili količina proizvoda'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Nekorektan JSON proizvoda');
} else if (error.name == 'ProductCostError') {
alert('Proizvodu nedostaje cena ili količina');
}
}
Neka vam stigne JSON ovog oblika:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Proverite ovaj JSON na opštu korektnost pri parsiranju, a posle parsiranja proverite da li se u rezultatu dobija niz, a ne nešto drugo. Ako se u rezultatu ne dobija niz - bacite izuzetak.