# Пример исключения с 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 на общую корректность при разборе, а после разбора проверьте, что в результате получается массив, а не что-то другое. Если в результате получается не массив - выбросите исключение.

←→
↑
en ru