JavaScript’te JSON
Önceki sayfa yalnızca çağrının biçimini değiştiriyordu ve this o çağrıyı izliyordu. Bu sayfa o konuyu bir kenara bırakır. Ürün hâlâ bellektedir; ad ve fiyat nesnenin üzerindedir. Aynı bilgileri bir dosyaya, başka bir programa veya sonraki sayfaya vermek istiyorsan sabit biçimli bir metin gerekir. Bu metnin adı JSON’dur.
Canlı nesne bu not değildir
Betik çalıştığı sürece literal yerinde durur ve üzerine bir metot konabilir; this hâlâ çağrının biçimine bağlıdır, önceki dersteki gibi. JSON yalnızca bir dizgedir: metodu yoktur ve this seçmez.
Metnin tutmasına izin verilen şey
📊 Canlı nesne ile JSON metni
| Parça | Nesne literali | JSON metni |
|---|---|---|
| Anahtar tırnakları | isteğe bağlı | çift tırnak zorunlu |
| Dizge tırnakları | tek veya çift | yalnız çift |
| Sondaki virgül | serbest | yasak |
| İşlev | metot olabilir | stringify atlar; metnin içine yazılırsa geçersizdir |
| undefined alan | gerçek bir değer | stringify nesneyi gezerken düşer |
Literal alışkanlığını bu metne taşıma. Her anahtar ve her dizge çift tırnak ister. Sondaki fazla virgül, metnin içindeki yorum ve çıplak işlev geçerli JSON değildir. Tablo hangi alışkanlığın düştüğünü ve hangisini parse hiç kabul etmediğini söyler.
let product = {
name: "Mug",
price: 12
};
console.log(JSON.stringify(product));
stringify notu yazar
JSON.stringify yalın alanların üzerinde yürür ve bir dizge döndürür; konsol {"name":"Mug","price":12} gösterir ve product olduğu gibi kalır. Adı hâlâ canlı nesneden okursun ve Mug alırsın. Dizge ayrı bir değerdir, kaydedilebilir veya gönderilebilir.
let text = '{"name":"Mug","price":12}';
let product = JSON.parse(text);
console.log(product.name);
parse nottan bir değer kurar
text hâlâ bir dizgedir, tırnaklar ve süslü parantezler durur. JSON.parse bu metinden yeni bir nesne kurar. Ardından product.name değeri Mug olur. Burada metot çağrılmaz ve this işe karışmaz.
let text = '{"name":"Mug","tags":["ceramic","gift"]}';
let product = JSON.parse(text);
console.log(product.tags[0]);
Liste notun içinde durabilir
JSON metni bir dizi taşıyabilir; parse sonrasında product.tags gerçek bir dizidir ve ilk göz ceramic olur. Dizi kendi konusu olarak sırada bekler, burada yalnızca metnin yüküdür.
let product = {
name: "Mug",
price: undefined,
tag() {
return this.name;
}
};
console.log(JSON.stringify(product));
Not veriyi tutar, davranışı değil
price değeri undefined idi. tag bir işlevdi. İkisi de metinden çıkar. Basılan yalnızca {"name":"Mug"} olur. Davranış canlı nesnede kalır ve nota girmez.
let text = "{name:'Mug'}";
try {
JSON.parse(text);
console.log("ok");
} catch (err) {
console.log("bad text");
}
Dağınık not parse edilmez
Tek tırnak ve tırnaksız anahtar literalde serbesttir, JSON’da değildir; bu yüzden JSON.parse hata fırlatır ve catch dalı bu demoyu düşürmek yerine bad text basar. Anahtara ve dizgeye çift tırnak koyarak metni düzelt. Bu henüz hatalar dersi değil, yalnızca bozuk JSON’un parse durdurduğunu gösterir.
Yön belli olunca araç da belli olur
Bellekten metne stringify ile gidersin, metinden değere parse ile dönersin. Sonradan üründe bir işlev gerekirse onu parse sonrasına eklersin, çünkü not işlevi yanında getirmemiştir. this hâlâ çağrının biçimine bağlıdır, JSON’a değil, ve sonraki ders dizidir: betikte canlı bir liste, yeni bir JSON kuralı değil.
Nottan bir alanı sayfada göster
Küçük bir ürün dizgesini parse et. Adı paragrafa yaz. Nesneyi betiğin içinde süslü parantezle kurma.
<!DOCTYPE html>
<html>
<head>
<title>json — page</title>
</head>
<body>
<p id="line">…</p>
<script>
let text = '{"name":"Mug","price":12}';
let product = JSON.parse(text);
let box = document.getElementById("line");
box.textContent = product.name;
</script>
</body>
</html>
Paragraf Mug gösterir, çünkü betik literal kurmamış, yalnızca metni okumuştur. Dizgenin içindeki adı değiştir ve sayfayı yenile, satır onu izlesin.
Alıştırma adımları
- Fincana stringify uygula ve tırnaklı metni oku; sonra aynı biçimi parse edip
Muggör. tagsiçeren notu parse et veceramicoku.- Metotlu ve fiyatı
undefinedolan nesneye stringify uygula ki metinde yalnıznamekalsın, tırnaksız anahtarlı notutry/catchiçine koyupbad textgör. - HTML demosunda yalnızca dizgenin içindeki adı değiştir, yenile ve paragrafı oku.
Sık kaymalar
- JSON metnini nesne literali sanmak ve
parseiçine tek tırnak ya da çıplak anahtar vermek - Bir metot veya
undefineddeğerininstringifysonrasında kalacağını sanmak - Metin isterken
parseçağırmak ya da metin hazırkenstringifyçağırmak; adı dizgenin kendisinde okumak,parsesonucundaki değerde değil - Sonraki sayfayı yine JSON sanmak, oysa diziler canlı bir listedir
Özet
- JSON veriyi anlatan metindir ve
stringifyyalın nesneyi o metne çevirir parsemetni yeniden bir değere döndürür- Anahtar ve dizge çift tırnak ister; fazla virgül veya tek tırnak
parseişlemini düşürür - Metotlar ve
undefinedalanlar metinden düşer - Okunmuş bir alan sayfada bir satırı doldurabilir ve sonraki ders dizidir, betikteki canlı liste
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek