Пример за изключение с JSON в JavaScript
Да предположим, че от някъде от външния свят към нас идва JSON с продукт:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Вече знаете, че методът JSON.parse
ще хвърли изключение, ако 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 за обща коректност при парсване, а след парсването проверете, че в резултат се получава масив, а не нещо друго. Ако в резултат се получи не масив - хвърлете изключение.