Exemplu de excepție cu JSON în JavaScript
Să presupunem că de undeva din lumea exterioară vine un JSON cu un produs:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Știți deja că metoda JSON.parse va
arunca o excepție dacă JSON-ul este incorect.
Să prindem această excepție:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// reacționăm cumva la excepție
}
Cu toate acestea, se poate întâmpla ca JSON-ul în sine să fie corect, dar să nu conțină câmpurile de care avem nevoie, de exemplu, nu există câmp pentru preț:
let json = '{"product": "apple", "amount": 5}'; // nu există preț
Să considerăm că și aceasta este o situație excepțională și în acest caz vom arunca o excepție personalizată:
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: 'lipsește prețul sau cantitatea pentru produs'
};
}
} catch (error) {
// reacționăm cumva la excepție
}
Acum blocul catch va primi două tipuri
de excepții: fie JSON-ul este în general incorect,
și atunci va fi o excepție de tipul SyntaxError,
fie JSON-ul este corect, dar nu conține câmpurile
de care avem nevoie, și atunci va fi o excepție de tipul
ProductCostError.
Să prindem aceste tipuri de excepții
în blocul catch:
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: 'lipsește prețul sau cantitatea pentru produs'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON produs incorect');
} else if (error.name == 'ProductCostError') {
alert('Produsului îi lipsește prețul sau cantitatea');
}
}
Să presupunem că la tine vine un JSON de următoarea formă:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Verificați acest JSON pentru corectitudinea generală la parsare, iar după parsare verificați că rezultatul este un array, și nu altceva. Dacă rezultatul nu este un array - aruncați o excepție.