JavaScriptда JSON учун мисолдаги истисно
Фарз қилайлик, бизга ташқи дунёдан қандайдир 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 ни умумй корректликка текширинг тайёрлов жараёнида, ва тайёрловдан кейин текширингки, натижада массав олинадими, бошқа нарса эмас. Агар натижада массав бўлмаса - истисно ушланг.