- JSON kurallarını bilmek ve onu bir JavaScript nesnesinden ayırt etmek
- Verileri
JSON.stringifyveJSON.parseile dönüştürmek - Hataları
try,catch,finallyvethrowile yönetmek
Bir hava durumu uygulaması Bakü'nün tahminini bir sunucudan alır. Sunucu ona nesne değil, metin gönderir; ağ üzerinden yalnızca metin taşınabilir. Peki bu metin yarım ya da bozuk gelirse? İyi bir program çökmez: sorunu yakalar ve kullanıcıya anlaşılır bir mesaj gösterir. Bu derste iki beceriyi de öğreneceksin.
JSON nedir?
JSON (JavaScript Object Notation), verileri metin olarak saklamak ve göndermek için kullanılan bir biçimdir. JavaScript nesnelerine çok benzer, ama her dil onu anlar: Python, Java, C# ve diğerleri. Bugün web siteleri, mobil uygulamalar ve sunucular birbirleriyle çoğunlukla JSON ile “konuşur”.
{
"city": "Baku",
"temperature": 24,
"sunny": true,
"forecast": [25, 27, 22],
"wind": { "speed": 5, "direction": "north" },
"warning": null
}| Özellik | JavaScript nesnesi | JSON |
|---|---|---|
| Anahtarlar | tırnaksız olabilir | yalnızca çift tırnakla |
| String'ler | her tür tırnak | yalnızca çift tırnak |
Fonksiyonlar, undefined | olur | olmaz |
| Yorumlar, sondaki virgül | olur | olmaz |
JSON.stringify ve JSON.parse
JSON.stringify bir nesneyi göndermek ya da kaydetmek için JSON string'ine çevirir. JSON.parse ise tersini yapar: JSON string'inden yeniden nesne oluşturur. Üçüncü argüman olarak 2 verirsen stringify metni girintilerle okunaklı biçimde düzenler.
const weather = { city: 'Baku', temperature: 24, sunny: true };
const text = JSON.stringify(weather);
console.log(text);
console.log(typeof text);
const back = JSON.parse(text);
console.log(back.city, typeof back);
console.log(JSON.stringify({ name: 'Leyla', level: 3 }, null, 2));▸ Beklenen çıktı
{"city":"Baku","temperature":24,"sunny":true}
string
Baku object
{
"name": "Leyla",
"level": 3
}const profile = {
name: 'Leyla',
nickname: undefined,
greet() { return 'Hi!'; },
born: new Date('2010-05-28'),
};
console.log(JSON.stringify(profile));▸ Beklenen çıktı
{"name":"Leyla","born":"2010-05-28T00:00:00.000Z"}Hatalar ve try...catch
Program çalışırken bir şeyler ters giderse JavaScript bir hata (exception) oluşturur. Yakalanmayan bir hata programı durdurur. En sık görülen türler şunlardır: SyntaxError (hatalı yazım, örneğin bozuk JSON), TypeError (bir değerle yapılamayacak işlem, örneğin null bir değerin özelliğini okumak) ve ReferenceError (var olmayan bir değişken).
Riskli kod bir try bloğuna konur. Orada hata olursa try'ın kalanı atlanır ve kontrol, hata nesnesini alan catch bloğuna geçer. finally bloğu ise hata olsa da olmasa da her zaman çalışır.
const input = '{ city: Baku }';
try {
const data = JSON.parse(input);
console.log('City:', data.city);
} catch (error) {
console.log('Could not read the data:', error.name);
} finally {
console.log('Check finished');
}
try {
const user = null;
console.log(user.name);
} catch (error) {
console.log('Problem:', error.name);
}▸ Beklenen çıktı
Could not read the data: SyntaxError Check finished Problem: TypeError
input metninde anahtar ve değer tırnaksız; bu JSON değil. city ve Baku kelimelerini çift tırnağa al ve kodu yeniden çalıştır.Kendi hatanı fırlatmak: throw
Bazen JavaScript açısından her şey yolundadır ama programın mantığı bozulur: örneğin biri bakiyeden fazla para çekmek ister. Böyle durumlarda throw new Error('...') ile kendi hatanı oluşturursun. throw'dan sonraki kod çalışmaz ve hata en yakın catch'e kadar “uçar”.
function withdraw(balance, amount) {
if (amount > balance) {
throw new Error('Not enough money');
}
return balance - amount;
}
try {
console.log(withdraw(100, 30));
console.log(withdraw(100, 500));
console.log('This line is never printed');
} catch (error) {
console.log('Error:', error.message);
}▸ Beklenen çıktı
70 Error: Not enough money
JSON geçerliyse nesneyi, bozuksa yedek değeri döndüren bir safeParse(text, fallback) fonksiyonu yaz.
Çözümü gösterÇözümü gizle
JSON.parse'ı try içinde çağırıp sonucu döndürürüz.Hata olursa
catch bloğu fallback değerini döndürür.Böyle bir fonksiyon programın geri kalanını hatalardan korur (koda bak).
function safeParse(text, fallback) {
try {
return JSON.parse(text);
} catch {
return fallback;
}
}
console.log(safeParse('[1, 2, 3]', []));
console.log(safeParse('oops', []));
console.log(safeParse('{"score": 90}', {}).score);▸ Beklenen çıktı
[ 1, 2, 3 ] [] 90
readScore(text) fonksiyonunu tamamla: JSON metnini okuyup score değerini döndürmeli. Metin geçerli bir JSON değilse 'Invalid JSON' mesajlı, puan 0–100 aralığında değilse 'Score out of range' mesajlı bir hata fırlat (throw new Error(...)). Aşağıdaki döngü her sonucu ya da hata mesajını yazdırır.
function readScore(text) {
// 1) JSON.parse inside try...catch → throw new Error('Invalid JSON')
// 2) score outside 0–100 → throw new Error('Score out of range')
// 3) return the score
}
const inputs = ['{"score": 92}', '{"score": 140}', '{score: 50}'];
for (const text of inputs) {
try {
console.log('Score:', readScore(text));
} catch (error) {
console.log('Error:', error.message);
}
}▸ Beklenen çıktı
Score: 92 Error: Score out of range Error: Invalid JSON
Önemli noktalar
- JSON, verileri metin olarak taşımak için evrensel bir biçimdir; anahtarlar ve string'ler çift tırnakla yazılır.
JSON.stringifynesneyi metne,JSON.parsemetni nesneye çevirir.tryriskli kodu içerir,catchhatayı yakalar,finallyher zaman çalışır.throw new Error('...')kendi hatanı oluşturur; ondan sonraki kod çalışmaz.- Hata nesnesinin
namevemessageözellikleri vardır; hataları sessizce yutma.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.