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'ду жалпы тууралыгы боюнча текшериңиз жандырууда, жана жандыруудан кийин текшериңиз, натыйжада массив алынабы же башка нерсе эмеспи. Эгерде натыйжада массив алынбаса - кошумча ыргытыңыз.