Przykład wyjątku z JSON w JavaScript

Załóżmy, że skądś ze świata zewnętrznego przychodzi do nas JSON z produktem:

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

Wiesz już, że metoda JSON.parse będzie rzucać wyjątek, jeśli JSON jest nieprawidłowy. Przechwyćmy ten wyjątek:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // w jakiś sposób reagujemy na wyjątek
}

Jednak może się zdarzyć, że sam JSON jest poprawny, ale nie zawiera potrzebnych nam pól, na przykład brakuje pola z ceną:

javascriptlet json = '{"product": "apple", "amount": 5}'; // brak ceny

Powiedzmy, że to także jest sytuacja wyjątkowa i w takim przypadku będziemy rzucać własny, niestandardowy wyjątek:

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: 'brak ceny lub ilości produktu'
    };
  }
} catch (error) {
  // w jakiś sposób reagujemy na wyjątek
}

Teraz blok catch będzie otrzymywać dwa typy wyjątków: albo JSON jest całkowicie nieprawidłowy, i wtedy będzie wyjątek typu SyntaxError, albo JSON jest poprawny, ale nie zawiera potrzebnych nam pól, i wtedy będzie wyjątek typu ProductCostError.

Przechwyćmy te typy wyjątków w bloku catch:

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: 'brak ceny lub ilości produktu'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nieprawidłowy JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produkt nie ma ceny lub ilości');
  }
}
Задание 1

Załóżmy, że przychodzi do ciebie JSON w takiej postaci:

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

Sprawdź ten JSON pod kątem ogólnej poprawności during parsing, a po sparsowaniu sprawdź, czy w wyniku otrzymujemy tablicę, a nie coś innego. Jeśli w wyniku nie otrzymujemy tablicy - rzuć wyjątek.