Прыклад выключэння з JSON у JavaScript
Хай да нас аднекуль з вонкавага свету прыходзіць JSON з прадуктам:
let json = '{"product": "яблык", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Вы ўжо ведаеце, што метад JSON.parse
будзе
выкідваць выключэнне, калі JSON някарэктны.
Давайце зловім гэтае выключэнне:
try {
let json = '{"product": "яблык", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// неяк рэагуем на выключэнне
}
Аднак, можа быць такое, што сам па сабе JSON карэктны, але не змяшчае патрэбных нам палёў, напрыклад, няма поля з цаной:
let json = '{"product": "яблык", "amount": 5}'; // няма цаны
Давайце скажам, што гэта таксама выключная сітуацыя і будзем у такім выпадку выкідваць сваё карыстальніцкае выключэнне:
try {
let json = '{"product": "яблык", "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": "яблык", "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 на агульную карэктнасць пры разборы, а пасля разбору праверце, што ў выніку атрымліваецца масіў, а не нешта іншае. Калі ў выніку атрымліваецца не масіў - выкіньце выключэнне.