АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗jsSpExcJSE 149 of 294 menu
Долгожданный Бесплатный курс по выкладке сайта на хостинг. МЫ УЖЕ НАЧАЛИ! Присоединяйтесь к нам!

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

enru