⊗jsSpExcJSE 149 of 294 menu

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.

azswbnuzen