АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗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 на агульную карэктнасць пры разборы, а пасля разбору праверце, што ў выніку атрымліваецца масіў, а не нешта іншае. Калі ў выніку атрымліваецца не масіў - выкіньце выключэнне.

byenru