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