Esimerkki poikkeuksesta JSON:lla JavaScriptissä

Oletetaan, että meille tulee jostain ulkoisesta lähteestä JSON tuotteella:

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

Tiedät jo, että menetelmä JSON.parse heittää poikkeuksen, jos JSON on virheellinen. Siepataan tämä poikkeus:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // reagoidaan jotenkin poikkeukseen
}

Kuitenkin voi olla tilanteita, että JSON itsessään on oikein, mutta se ei sisällä tarvitsemiamme kenttiä, esimerkiksi hintakenttä puuttuu:

javascriptlet json = '{"product": "apple", "amount": 5}'; // hinta puuttuu

Sanotaan, että tämä on myös poikkeustilanne ja heitämme tällaisessa tapauksessa oman mukautetun poikkeuksen:

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: 'tuotteelta puuttuu hinta tai määrä'
    };
  }
} catch (error) {
  // reagoidaan jotenkin poikkeukseen
}

Nyt catch -lohko saa kahden tyyppisiä poikkeuksia: joko JSON on yleisesti oikein, ja silloin poikkeus on tyyppiä SyntaxError, tai JSON on oikein, mutta se ei sisällä tarvittavia kenttiä, ja silloin poikkeus on tyyppiä ProductCostError.

Siepataan catch -lohkossa nämä poikkeustyypit:

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: 'tuotteelta puuttuu hinta tai määrä'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('Virheellinen JSON-tuote');
  } else if (error.name == 'ProductCostError') {
    alert('Tuotteelta puuttuu hinta tai määrä');
  }
}
Задание 1

Oletetaan, että saat JSONin seuraavanlaista muotoa:

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

Tarkista tämä JSON yleisen oikeellisuuden varalta jäsentämisen yhteydessä, ja jäsentämisen jälkeen tarkista, että tuloksena on taulukko, eikä jotain muuta. Jos tuloksena ei ole taulukko - heitä poikkeus.