# Exception with JSON example in JavaScript

Let JSON with a product come to us from somewhere:

`let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount);`

You already know that the `JSON.parse` method will throw an exception if the JSON is invalid. Let's catch this exception:

`try { let json = '{"product": "apple", "price": 1000, "amount": 5}'; let product = JSON.parse(json); alert(product.price * product.amount); } catch (error) { // we somehow react to an exception }`

However, it may be that the JSON itself is correct, but doesn't contain the fields we need, for example, there is no price field:

`let json = '{"product": "apple", "amount": 5}'; // no price`

Let's say that this is also an exception and in this case we will throw our custom exception:

`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: 'there is no price or amount for the product' }; } } catch (error) { // we somehow react to an exception }`

Now the `catch`-block will receive two types of exceptions: either the JSON is not correct at all, in which case there will be an exception like `SyntaxError`, or the JSON is correct, but does not contain the fields we need, in which case there will be an exception like `ProductCostError`.

Let's catch these types of exceptions in the `catch`-block:

`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: 'there is no price or amount for the product' }; } } catch (error) { if (error.name == 'SyntaxError') { alert('Invalid JSON of the product'); } else if (error.name == 'ProductCostError') { alert('Product has no price or amount'); } }`

Let JSON come to you like this:

`let json = `[ { "name": "user1", "age": 25, "salary": 1000 }, { "name": "user2", "age": 26, "salary": 2000 }, { "name": "user3", "age": 27, "salary": 3000 } ]`;`

Check this JSON for the correctness as a whole when parsing, and after parsing - check that the result is an array and not something else. If the result is not an array, throw an exception.

←→
↑
en ru