Primer izjeme z JSON v JavaScriptu

Recimo, da od nekod iz zunanjega sveta pride JSON s produktom:

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

Že veste, da bo metoda JSON.parse vrgla izjemo, če JSON ni pravilen. Ujamimo to izjemo:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // nekako se odzovemo na izjemo
}

Vendar se lahko zgodi, da je sam JSON pravilen, vendar ne vsebuje potrebnih polj, na primer, ni polja s ceno:

javascriptlet json = '{"product": "apple", "amount": 5}'; // ni cene

Recimo, da je tudi to izjemna situacija in bomo v tem primeru vrgli lastno uporabniško izjemo:

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: 'manjka cena ali količina pri produktu'
    };
  }
} catch (error) {
  // nekako se odzovemo na izjemo
}

Sedaj bo blok catch prejel dve vrsti izjem: bodisi JSON sploh ni pravilen, in takrat bo izjema vrste SyntaxError, ali pa je JSON pravilen, vendar ne vsebuje potrebnih polj, in takrat bo izjema vrste ProductCostError.

V bloku catch bomo ujemali te vrste izjem:

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: 'manjka cena ali količina pri produktu'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nepravilen JSON produkta');
  } else if (error.name == 'ProductCostError') {
    alert('Produktu manjka cena ali količina');
  }
}
Задание 1

Recimo, da k vam pride JSON takšne oblike:

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

Preverite ta JSON za splošno pravilnost pri razčlenjevanju, in po razčlenjevanju preverite, da se kot rezultat dobi seznam, ne pa kaj drugega. Če kot rezultat ni seznam - vrzite izjemo.