⊗jsSpExcJSE 149 of 294 menu

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

ithuazuzlhy