Esempio di eccezione con JSON in JavaScript
Supponiamo che da un mondo esterno ci arrivi un JSON con un prodotto:
let 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:
try {
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:
let json = '{"product": "apple", "amount": 5}'; // nessun prezzo
Diciamo che anche questa è una situazione eccezionale e in tal caso lanceremo una nostra eccezione personalizzata:
try {
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:
try {
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à');
}
}
Supponiamo che ti arrivi un JSON di questo tipo:
let 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.