⊗jsSpExcJSE 149 of 294 menu

Příklad výjimky s JSON v JavaScriptu

Předpokládejme, že k nám z vnějšího světa přichází JSON s produktem:

let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount);

Už víte, že metoda JSON.parse bude vyhazovat výjimku, pokud JSON není korektní. Pojďme tuto výjimku zachytit:

try { let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount); } catch (error) { // nějak reagujeme na výjimku }

Může se však stát, že samotný JSON je korektní, ale neobsahuje potřebná pole, například chybí pole s cenou:

let json = '{"product": "apple", "amount": 5}'; // není cena

Řekněme, že to je také výjimečná situace a v takovém případě budeme vyhazovat vlastní uživatelskou výjimku:

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: 'chybí cena nebo množství produktu' }; } } catch (error) { // nějak reagujeme na výjimku }

Nyní bude blok catch zachytávat dva typy výjimek: buď je JSON obecně nekorektní, a pak bude výjimka typu SyntaxError, nebo je JSON korektní, ale neobsahuje potřebná pole, a pak bude výjimka typu ProductCostError.

Pojďme v bloku catch tyto typy výjimek zachytávat:

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: 'chybí cena nebo množství produktu' }; } } catch (error) { if (error.name == 'SyntaxError') { alert('Nekorektní JSON produktu'); } else if (error.name == 'ProductCostError') { alert('Produktu chybí cena nebo množství'); } }

Předpokládejme, že k vám přichází JSON tohoto druhu:

let json = `[ { "name": "user1", "age": 25, "salary": 1000 }, { "name": "user2", "age": 26, "salary": 2000 }, { "name": "user3", "age": 27, "salary": 3000 } ]`;

Zkontrolujte tento JSON na obecnou korektnost při parsování, a po parsování zkontrolujte, že výsledkem je pole, a ne něco jiného. Pokud výsledkem není pole - vyhoďte výjimku.

iddamsuzlpt