Exemplo de exceção com JSON em JavaScript
Suponha que recebamos um JSON de algum lugar externo com um produto:
let 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:
try {
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:
let 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:
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: '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:
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: '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');
}
}
Suponha que você receba um JSON com a seguinte forma:
let 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.