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:

javascriptlet 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:

javascripttry {
  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:

javascriptlet 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:

javascripttry {
  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:

javascripttry {
  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í');
  }
}
Задание 1

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

javascriptlet 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.