Пример за изключение с JSON в JavaScript

Да предположим, че от някъде от външния свят към нас идва JSON с продукт:

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

Вече знаете, че методът JSON.parse ще хвърли изключение, ако JSON е некоректен. Нека хванем това изключение:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // реагираме по някакъв начин на изключението
}

Въпреки това, може да се случи самият JSON да е коректен, но да не съдържа нужните ни полета, например липсва поле за цена:

javascriptlet json = '{"product": "apple", "amount": 5}'; // няма цена

Нека приемем, че това също е изключителна ситуация и в такъв случай ще хвърляме собствено потребителско изключение:

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: 'липсва цена или количество за продукта'
    };
  }
} catch (error) {
  // реагираме по някакъв начин на изключението
}

Сега блокът catch ще получава два типа изключения: или JSON е напълно некоректен, и тогава ще има изключение от тип SyntaxError, или JSON е коректен, но не съдържа нужните ни полета, и тогава ще има изключение от тип ProductCostError.

Нека в блока 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: 'липсва цена или количество за продукта'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('Некоректен JSON за продукт');
  } else if (error.name == 'ProductCostError') {
    alert('За продукта липсва цена или количество');
  }
}
Задание 1

Да предположим, че към вас пристига JSON със следния вид:

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

Проверете този JSON за обща коректност при парсване, а след парсването проверете, че в резултат се получава масив, а не нещо друго. Ако в резултат се получи не масив - хвърлете изключение.