Exemplo de exceção com JSON em JavaScript

Suponha que recebamos um JSON de algum lugar externo com um produto:

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

Você já sabe que o método JSON.parse lançará uma exceção se o JSON for inválido. Vamos capturar essa exceção:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // reagimos de alguma forma à exceção
}

No entanto, pode acontecer que o próprio JSON seja válido, mas não contenha os campos de que precisamos, por exemplo, falta o campo de preço:

javascriptlet json = '{"product": "apple", "amount": 5}'; // sem preço

Vamos considerar que esta também é uma situação excepcional e, nesse caso, lançaremos a nossa própria exceção personalizada:

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: 'preço ou quantidade ausentes para o produto'
    };
  }
} catch (error) {
  // reagimos de alguma forma à exceção
}

Agora, o bloco catch receberá dois tipos de exceções: ou o JSON está completamente inválido, e então será uma exceção do tipo SyntaxError, ou o JSON é válido, mas não contém os campos necessários, e então será uma exceção do tipo ProductCostError.

Vamos, no bloco catch, capturar estes tipos de exceções:

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: 'preço ou quantidade ausentes para o produto'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON do produto inválido');
  } else if (error.name == 'ProductCostError') {
    alert('O produto está sem preço ou quantidade');
  }
}
Задание 1

Suponha que você receba um JSON com a seguinte forma:

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

Verifique a validade geral deste JSON ao analisá-lo (fazer o parsing) e, após a análise, verifique se o resultado é um array, e não outra coisa. Se o resultado não for um array - lance uma exceção.