Прыклад выключэння з JSON у JavaScript
Хай да нас адкуль-небудзь з вонкавага свету прыходзіць JSON з прадуктам:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Вы ўжо ведаеце, што метад JSON.parse будзе
выкідваць выключэнне, калі JSON някарэктны.
Давайце зловім гэта выключэнне:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// неяк рэагуем на выключэнне
}
Аднак, можа быць такое, што сам па сабе JSON карэктны, але не змяшчае патрэбных нам палёў, напрыклад, няма поля з цаной:
let json = '{"product": "apple", "amount": 5}'; // няма цаны
Давайце скажам, што гэта таксама выключная сітуацыя і будзем у такім выпадку выкідваць сваё карыстальніцкае выключэнне:
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: 'адсутнічае цана або колькасць у прадукту'
};
}
} catch (error) {
// неяк рэагуем на выключэнне
}
Цяпер блок catch будзе атрымліваць два тыпы
выключэнняў: альбо JSON наогул някарэктны,
і тады будзе выключэнне тыпу SyntaxError,
альбо JSON карэктны, але не змяшчае патрэбных
нам палёў, і тады будзе выключэнне тыпу
ProductCostError.
Давайце ў блоку 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: 'адсутнічае цана або колькасць у прадукту'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Някарэктны JSON прадукту');
} else if (error.name == 'ProductCostError') {
alert('У прадукту адсутнічае цана або колькасць');
}
}
Хай да вас прыходзіць JSON вось такога выгляду:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Праверце гэты JSON на агульную карэктнасць пры разборы, а пасля разбору праверце, што ў выніку атрымліваецца масіў, а не нешта іншае. Калі ў выніку атрымліваецца не масіў - выкіньце выключэнне.