JavaScript'te JSON ile İstisna Örneği
Dışarıdan bize bir yerden bir ürünle ilgili JSON geldiğini varsayalım:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
JSON.parse metodunun, JSON geçersiz olduğunda
bir istisna fırlatacağını zaten biliyorsunuz.
Bu istisnayı yakalayalım:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// istisnaya bir şekilde tepki veriyoruz
}
Ancak, JSON'un kendi başına geçerli olduğu ama ihtiyacımız olan alanları içermediği durumlar olabilir, örneğin fiyat alanı yok:
let json = '{"product": "apple", "amount": 5}'; // fiyat yok
Diyelim ki bunun da istisnai bir durum olduğunu söylüyoruz ve böyle bir durumda kendi kullanıcı tanımlı istisnamızı fırlatacağız:
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: 'ürün için fiyat veya miktar bilgisi eksik'
};
}
} catch (error) {
// istisnaya bir şekilde tepki veriyoruz
}
Artık catch bloğu iki tür istisna
alacak: ya JSON tamamen geçersiz olacak
ve SyntaxError türünde bir istisna
oluşacak, ya da JSON geçerli ancak
ihtiyacımız olan alanları içermiyor olacak
ve bu durumda ProductCostError
türünde bir istisna oluşacak.
catch bloğunda bu istisna türlerini
yakalayalım:
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: 'ürün için fiyat veya miktar bilgisi eksik'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Geçersiz ürün JSON formatı');
} else if (error.name == 'ProductCostError') {
alert('Üründe fiyat veya miktar bilgisi eksik');
}
}
Size şu formatta bir JSON geldiğini varsayalım:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Bu JSON'u ayrıştırırken genel geçerlilik kontrolünden geçirin ve ayrıştırmadan sonra sonuçta bir dizi elde edildiğini, başka bir şey olmadığını kontrol edin. Eğer sonuç bir dizi değilse - bir istisna fırlatın.