Мисоли истисно бо 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-ро барои дурустии умумӣ ҳангоми таҳлил тафтиш кунед, ва пас аз таҳлил тафтиш кунед, ки дар натиҷа массив ба даст меояд, на чизе дигар. Агар дар натиҷа массив наояд - истисно партофта шавад.