Пример исключения с 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 на общую корректность при разборе, а после разбора проверьте, что в результате получается массив, а не что-то другое. Если в результате получается не массив - выбросите исключение.