Príklad výnimky s JSON v JavaScripte

Povedzme, že k nám z externého sveta prichádza JSON s produktom:

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

Už viete, že metóda JSON.parse bude vyhadzovať výnimku, ak JSON je nekorektný. Poďme chytiť túto výnimku:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // nejako reagujeme na výnimku
}

Avšak, môže nastať situácia, kedy samotný JSON je korektný, ale neobsahuje potrebné pole, napríklad, chýba pole s cenou:

javascriptlet json = '{"product": "apple", "amount": 5}'; // nie je cena

Povedzme, že to je tiež výnimková situácia a v takom prípade budeme vyhadzovať vlastnú užívateľskú výnimku:

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: 'chýba cena alebo množstvo produktu'
    };
  }
} catch (error) {
  // nejako reagujeme na výnimku
}

Teraz blok catch bude dostávať dva typy výnimiek: buď JSON je úplne nekorektný, a potom bude výnimka typu SyntaxError, alebo JSON je korektný, ale neobsahuje potrebné pole, a potom bude výnimka typu ProductCostError.

Poďme v bloku catch zachytávať tieto typy výnimiek:

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: 'chýba cena alebo množstvo produktu'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nekorektný JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produktu chýba cena alebo množstvo');
  }
}
Задание 1

Povedzme, že k vám prichádza JSON takéhoto druhu:

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

Skontrolujte tento JSON na všeobecnú korektnosť pri parsovaní, a po parsovaní skontrolujte, že výsledkom je pole, a nie niečo iné. Ak výsledkom nie je pole - vyhoďte výnimku.