Esempio di eccezione con JSON in JavaScript

Supponiamo che da un mondo esterno ci arrivi un JSON con un prodotto:

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

Sapete già che il metodo JSON.parse lancierà un'eccezione se il JSON non è corretto. Intercettiamo questa eccezione:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // reagiamo in qualche modo all'eccezione
}

Tuttavia, potrebbe accadere che il JSON di per sé sia corretto, ma non contenga i campi di cui abbiamo bisogno, ad esempio, manca il campo del prezzo:

javascriptlet json = '{"product": "apple", "amount": 5}'; // nessun prezzo

Diciamo che anche questa è una situazione eccezionale e in tal caso lanceremo una nostra eccezione personalizzata:

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: 'manca il prezzo o la quantità del prodotto'
    };
  }
} catch (error) {
  // reagiamo in qualche modo all'eccezione
}

Ora il blocco catch riceverà due tipi di eccezioni: o il JSON è del tutto non corretto, e allora ci sarà un'eccezione di tipo SyntaxError, oppure il JSON è corretto, ma non contiene i campi di cui abbiamo bisogno, e allora ci sarà un'eccezione di tipo ProductCostError.

Nel blocco catch intercettiamo questi tipi di eccezioni:

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: 'manca il prezzo o la quantità del prodotto'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON prodotto non corretto');
  } else if (error.name == 'ProductCostError') {
    alert('Al prodotto manca il prezzo o la quantità');
  }
}
Задание 1

Supponiamo che ti arrivi un JSON di questo tipo:

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

Verifica la correttezza generale di questo JSON durante l'analisi, e dopo l'analisi verifica che il risultato sia un array, e non qualcos'altro. Se il risultato non è un array - lancia un'eccezione.