JavaScript-dä JSON bilen çäklemeleriň nusgasy
Bize daşary dünýäden nädire bir JSON önümi bilen geler diýeliň:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Siz bilýäňiz ýaly, usul JSON.parse,
JSON nädogry bolsa, çäklemeleri atar.
Geliň bu çäklemäni tutalyň:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// çäklemä nähili bolsa şeýle jogap berýäris
}
Şeýle-de bolup bilýär, JSON özi dogry, ýöne bize zerur meýdanlary ýok, mysal üçin, bahasy ýok:
let json = '{"product": "apple", "amount": 5}'; // bahasy ýok
Geliň diýeliň, bu hem çäklemeli ýagdaýdy we şeýle ýagdaýda öz ulanyjy çäklemämizi atarys:
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: 'önümde baha ýa-da sany ýok'
};
}
} catch (error) {
// çäklemä nähili bolsa şeýle jogap berýäris
}
Indi catch blogy iki görnüşli
çäklemeleri alar: ýa JSON doly nädogry,
şonda SyntaxError görnüşli çäklemeler bolar,
ýa-da JSON dogry, ýöne bize zerur meýdanlar
ýok, şonda bolsa ProductCostError
görnüşli çäklemeler bolar.
Geliň catch blogynda bu
çäklemeleriň görnüşlerini tutalyň:
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: 'önümde baha ýa-da sany ýok'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Önümiň JSON-y nädogry');
} else if (error.name == 'ProductCostError') {
alert('Önümde baha ýa-da sany ýok');
}
}
Size şuňa meňzeş JSON geler diýeliň:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Bu JSON-y düzümiň ýerine ýetirilmegi üçin umumy dogrulygyna barlaň, we düzümden soň, netijede massiw alnýandygyny, başga bir zadyň däldigini barlaň. Netijede massiw bolmasa - çäklemeleri atyň.