Пример искључења са JSON-ом у JavaScript-у
Нека нам из спољашњег света дође JSON са производом:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Већ знате да ће метод JSON.parse
бацити изузетак (exception) ако је JSON
неисправан.
Хајде да ухватимо тај изузетак:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// некако реагујемо на изузетак
}
Међутим, може се десити да сам JSON коректан, али да не садржи поља која су нам потребна, на пример, нема поља са ценом:
let json = '{"product": "apple", "amount": 5}'; // нема цене
Рецимо да је и то изузетна ситуација и да ћемо у том случају бацити сопствени (кориснички) изузетак:
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: 'недостаје цена или количина производа'
};
}
} catch (error) {
// некако реагујемо на изузетак
}
Сада ће блок catch примати две врсте
изузетака: или је JSON уопште неисправан,
и тада ће бити изузетак типа SyntaxError,
или је JSON исправан, али не садржи потребна
нам поља, и тада ће бити изузетак типа
ProductCostError.
Хајде да у блоку 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: 'недостаје цена или количина производа'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Неисправан JSON производа');
} else if (error.name == 'ProductCostError') {
alert('Производу недостаје цена или количина');
}
}
Нека вам дође JSON оваквог облика:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Проверите овај JSON на општу исправност при парсирању, а након парсирања проверите да ли у резултату добијате низ, а не нешто друго. Ако у резултату добијете не низ - баците изузетак.