Ejemplo de excepción con JSON en JavaScript
Supongamos que nos llega de algún lugar del mundo externo un JSON con un producto:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Ya sabes que el método JSON.parse
lanzará una excepción si el JSON es incorrecto.
Aceptemos esta excepción:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// de alguna manera reaccionamos a la excepción
}
Sin embargo, puede suceder que el propio JSON sea correcto, pero no contenga los campos que necesitamos, por ejemplo, no hay un campo con el precio:
let json = '{"product": "apple", "amount": 5}'; // no hay precio
Digamos que esta también es una situación excepcional y en tal caso lanzaremos nuestra propia excepción de usuario:
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: 'falta el precio o la cantidad del producto'
};
}
} catch (error) {
// de alguna manera reaccionamos a la excepción
}
Ahora el bloque catch recibirá dos tipos
de excepciones: o el JSON es incorrecto en general,
y entonces será una excepción de tipo SyntaxError,
o el JSON es correcto, pero no contiene los campos
que necesitamos, y entonces será una excepción de tipo
ProductCostError.
Aceptemos estos tipos de excepciones
en el bloque 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: 'falta el precio o la cantidad del producto'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON de producto incorrecto');
} else if (error.name == 'ProductCostError') {
alert('Al producto le falta el precio o la cantidad');
}
}
Supongamos que te llega un JSON de la siguiente forma:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Verifica este JSON para una corrección general al analizarlo, y después del análisis verifica que el resultado sea un array, y no otra cosa. Si el resultado no es un array - lanza una excepción.