Primer izjeme z JSON v JavaScriptu
Recimo, da od nekod iz zunanjega sveta pride JSON s produktom:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Že veste, da bo metoda JSON.parse
vrgla izjemo, če JSON ni pravilen.
Ujamimo to izjemo:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// nekako se odzovemo na izjemo
}
Vendar se lahko zgodi, da je sam JSON pravilen, vendar ne vsebuje potrebnih polj, na primer, ni polja s ceno:
let json = '{"product": "apple", "amount": 5}'; // ni cene
Recimo, da je tudi to izjemna situacija in bomo v tem primeru vrgli lastno uporabniško izjemo:
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: 'manjka cena ali količina pri produktu'
};
}
} catch (error) {
// nekako se odzovemo na izjemo
}
Sedaj bo blok catch prejel dve vrsti
izjem: bodisi JSON sploh ni pravilen,
in takrat bo izjema vrste SyntaxError,
ali pa je JSON pravilen, vendar ne vsebuje potrebnih
polj, in takrat bo izjema vrste
ProductCostError.
V bloku catch bomo ujemali te
vrste izjem:
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: 'manjka cena ali količina pri produktu'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Nepravilen JSON produkta');
} else if (error.name == 'ProductCostError') {
alert('Produktu manjka cena ali količina');
}
}
Recimo, da k vam pride JSON takšne oblike:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Preverite ta JSON za splošno pravilnost pri razčlenjevanju, in po razčlenjevanju preverite, da se kot rezultat dobi seznam, ne pa kaj drugega. Če kot rezultat ni seznam - vrzite izjemo.