⊗jsSpExcJSE 149 of 294 menu

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.

msplfrides