PHP JSON İşlemleri – json_encode() ve json_decode() Kullanımı
PHP programlama dilinde verileri farklı sistemler arasında aktarmak, saklamak ve işlemek için çeşitli veri formatları kullanılmaktadır. Bu formatlardan biri de JSON formatıdır.
JSON, özellikle web uygulamalarında veri alışverişi yapmak için yaygın olarak kullanılan, okunabilir ve metin tabanlı bir veri formatıdır.
PHP'de json_encode() fonksiyonu ile PHP verilerini JSON formatına dönüştürebilir, json_decode() fonksiyonu ile JSON verilerini tekrar PHP içerisinde kullanabileceğimiz veri yapılarına çevirebiliriz.
Bu dersimizde JSON formatının ne olduğunu, PHP ile JSON verilerinin nasıl oluşturulduğunu, okunduğunu ve dosyalarda saklandığını örneklerle öğreneceğiz.
1. JSON NEDİR?
JSON, JavaScript Object Notation ifadesinin kısaltmasıdır. Türkçede JavaScript Nesne Gösterimi olarak ifade edilebilir.
JSON, verilerin belirli bir yapıda saklanmasını ve farklı programlama dilleri arasında aktarılmasını sağlayan metin tabanlı bir veri formatıdır.
JSON formatı JavaScript kökenli olmasına rağmen PHP, Python, Java, C# ve birçok programlama dili tarafından desteklenmektedir.
Örneğin bir öğrencinin bilgilerini JSON formatında aşağıdaki şekilde gösterebiliriz:
{
"ad": "Ahmet",
"soyad": "Yılmaz",
"yas": 17,
"sinif": "11-A",
"aktif": true
}
Bu örnekte öğrencinin adı, soyadı, yaşı, sınıfı ve aktiflik durumu JSON formatında saklanmıştır.
JSON verileri genellikle anahtar-değer ilişkisiyle oluşturulur.
Örneğin "ad" bir anahtar, "Ahmet" ise bu anahtarın değeridir.
2. JSON VERİ YAPISI VE KURALLARI
JSON formatında veriler belirli kurallara göre yazılır.
- Nesneler süslü parantezler { } içerisinde tanımlanır.
- Diziler köşeli parantezler [ ] içerisinde tanımlanır.
- Anahtarlar çift tırnak içerisinde yazılır.
- Anahtar ile değer arasında iki nokta (:) bulunur.
- Birden fazla veri virgülle ayrılır.
- Metin değerleri çift tırnak içerisinde yazılır.
- Sayısal değerler tırnak kullanılmadan yazılabilir.
- Mantıksal değerler true veya false olabilir.
- Boş değerler null olarak gösterilir.
JSON VERİ TÜRLERİ
| Veri Türü |
Örnek |
| String (Metin) |
"Ahmet" |
| Number (Sayı) |
25 |
| Boolean (Mantıksal) |
true / false |
| Array (Dizi) |
[10, 20, 30] |
| Object (Nesne) |
{"ad": "Ayşe"} |
| Null (Boş Değer) |
null |
3. PHP JSON_ENCODE() FONKSİYONU
json_encode() fonksiyonu, PHP verilerini JSON biçiminde bir metne dönüştürmek için kullanılır.
Örneğin bir PHP dizisini JSON formatına dönüştürelim.
<?php
$ogrenci = array(
"ad" => "Ahmet",
"soyad" => "Yılmaz",
"yas" => 17,
"sinif" => "11-A"
);
$json = json_encode($ogrenci);
echo $json;
?>
Ekran Çıktısı:
{"ad":"Ahmet","soyad":"Y\u0131lmaz","yas":17,"sinif":"11-A"}
Burada PHP'nin ilişkisel dizisi JSON nesnesine dönüştürülmüştür.
Varsayılan kullanımda bazı Türkçe karakterler Unicode kaçış dizileriyle gösterilebilir. Bu durum verinin bozulduğu anlamına gelmez.
4. JSON_UNESCAPED_UNICODE KULLANIMI
JSON oluştururken Türkçe karakterlerin okunabilir biçimde korunmasını istiyorsak JSON_UNESCAPED_UNICODE seçeneğini kullanabiliriz.
<?php
$ogrenci = array(
"ad" => "Ayşe",
"soyad" => "Çelik",
"sehir" => "İstanbul"
);
$json = json_encode(
$ogrenci,
JSON_UNESCAPED_UNICODE
);
echo $json;
?>
Ekran Çıktısı:
{"ad":"Ayşe","soyad":"Çelik","sehir":"İstanbul"}
Bu seçenek özellikle Türkçe içeriklerin bulunduğu JSON verilerinde kullanışlıdır.
5. JSON_PRETTY_PRINT KULLANIMI
JSON verileri normalde tek satır hâlinde oluşturulabilir. Daha okunabilir bir görünüm elde etmek için JSON_PRETTY_PRINT seçeneğini kullanabiliriz.
<?php
$urun = array(
"ad" => "Bilgisayar",
"fiyat" => 25000,
"stok" => 12
);
$json = json_encode(
$urun,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
);
echo "<pre>";
echo htmlspecialchars($json, ENT_QUOTES, "UTF-8");
echo "</pre>";
?>
Ekran Çıktısı:
{
"ad": "Bilgisayar",
"fiyat": 25000,
"stok": 12
}
Bu örnekte iki farklı JSON seçeneği birlikte kullanılmıştır.
JSON_PRETTY_PRINT veriyi satırlara ayırarak girintili biçimde gösterirken JSON_UNESCAPED_UNICODE Türkçe karakterlerin okunabilir kalmasını sağlar.
6. PHP JSON_DECODE() FONKSİYONU
json_decode() fonksiyonu, JSON biçimindeki metni PHP içerisinde kullanılabilecek veri yapılarına dönüştürür.
Varsayılan kullanımda JSON nesneleri PHP nesnesine dönüştürülür.
<?php
$json = '{"ad":"Ahmet","yas":17,"sinif":"11-A"}';
$ogrenci = json_decode($json);
echo $ogrenci->ad . "<br>";
echo $ogrenci->yas . "<br>";
echo $ogrenci->sinif;
?>
Ekran Çıktısı:
Ahmet
17
11-A
Burada JSON verisi PHP nesnesine dönüştürülmüştür. Nesne özelliklerine erişmek için -> operatörü kullanılmıştır.
7. JSON VERİLERİNİ PHP DİZİSİNE DÖNÜŞTÜRME
json_decode() fonksiyonunun ikinci parametresine true değeri verilirse JSON nesneleri PHP ilişkisel dizisine dönüştürülür.
<?php
$json = '{"ad":"Ayşe","yas":16,"sinif":"10-B"}';
$ogrenci = json_decode($json, true);
echo $ogrenci["ad"] . "<br>";
echo $ogrenci["yas"] . "<br>";
echo $ogrenci["sinif"];
?>
Ekran Çıktısı:
Ayşe
16
10-B
JSON_DECODE() NESNE VE DİZİ FARKI
| Kullanım |
Sonuç |
Veriye Erişim |
| json_decode($json) |
PHP nesnesi |
$veri->ad |
| json_decode($json, true) |
PHP ilişkisel dizisi |
$veri["ad"] |
Hangi yöntemin kullanılacağı uygulamanın ihtiyaçlarına bağlıdır.
8. PHP DİZİLERİNİ JSON FORMATINA DÖNÜŞTÜRME
PHP'de birden fazla veriyi içeren diziler de JSON formatına dönüştürülebilir.
<?php
$dersler = array(
"PHP",
"HTML",
"CSS",
"JavaScript"
);
$json = json_encode(
$dersler,
JSON_UNESCAPED_UNICODE
);
echo $json;
?>
Ekran Çıktısı:
["PHP","HTML","CSS","JavaScript"]
Burada sıralı PHP dizisi JSON dizisine dönüştürülmüştür.
9. PHP İLE JSON DOSYASINA VERİ YAZMA
PHP'de oluşturulan JSON verileri bir dosyada saklanabilir.
Bunun için önce json_encode() ile JSON metni oluşturulur, ardından file_put_contents() ile dosyaya yazılır.
Örneğin öğrenci bilgilerini ogrenci.json dosyasına kaydedelim.
<?php
$ogrenci = array(
"ad" => "Mehmet",
"soyad" => "Demir",
"sinif" => "11-A",
"not" => 85
);
$json = json_encode(
$ogrenci,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
);
if ($json !== false) {
$sonuc = file_put_contents(
__DIR__ . "/ogrenci.json",
$json
);
if ($sonuc !== false) {
echo "JSON dosyası oluşturuldu.";
} else {
echo "Dosyaya yazılamadı.";
}
}
?>
Bu uygulamada öğrenci bilgileri JSON formatına dönüştürülerek ogrenci.json dosyasına kaydedilir.
10. PHP İLE JSON DOSYASINDAN VERİ OKUMA
Daha önce oluşturulan JSON dosyaları PHP ile okunabilir.
Öncelikle file_get_contents() ile dosyanın içeriği alınır. Ardından json_decode() kullanılarak PHP dizisine dönüştürülür.
<?php
$dosya = __DIR__ . "/ogrenci.json";
if (is_file($dosya)) {
$json = file_get_contents($dosya);
if ($json !== false) {
$ogrenci = json_decode($json, true);
if (json_last_error() === JSON_ERROR_NONE
&& is_array($ogrenci)) {
echo "Ad: " . htmlspecialchars(
$ogrenci["ad"],
ENT_QUOTES,
"UTF-8"
);
echo "<br>";
echo "Sınıf: " . htmlspecialchars(
$ogrenci["sinif"],
ENT_QUOTES,
"UTF-8"
);
} else {
echo "JSON verisi geçersiz.";
}
}
} else {
echo "JSON dosyası bulunamadı.";
}
?>
Bu örnekte JSON dosyasındaki veriler okunmuş ve PHP dizisine dönüştürülerek ekrana yazdırılmıştır.
11. PHP JSON HATALARINI KONTROL ETME
JSON verilerinin yapısı hatalıysa json_decode() işlemi başarısız olabilir.
Bu tür durumları kontrol etmek için json_last_error() ve json_last_error_msg() fonksiyonları kullanılabilir.
<?php
$json = '{"ad":"Ahmet","yas":17,}';
$veri = json_decode($json, true);
if (json_last_error() === JSON_ERROR_NONE) {
echo "JSON verisi geçerli.";
} else {
echo "JSON hatası: " . json_last_error_msg();
}
?>
Bu örnekte JSON metninde son değerden sonra fazladan virgül bulunduğu için söz dizimi hatası oluşur.
Not: PHP 7.3 ve sonraki sürümlerde JSON_THROW_ON_ERROR seçeneği kullanılarak JSON hatalarının istisna şeklinde yönetilmesi de mümkündür.
12. PHP JSON İŞLEMLERİ ÖRNEK UYGULAMALARI
Şimdi öğrendiğimiz JSON fonksiyonlarını kullanarak beş farklı uygulama geliştirelim.
ÖRNEK 1: ÖĞRENCİ BİLGİLERİNİ JSON FORMATINA DÖNÜŞTÜRME
Bu uygulamada bir öğrencinin bilgilerini PHP dizisinde saklayıp JSON formatına dönüştüreceğiz.
<?php
$ogrenci = array(
"ad" => "Zeynep",
"soyad" => "Kaya",
"yas" => 16,
"sinif" => "10-A",
"aktif" => true
);
$json = json_encode(
$ogrenci,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
);
echo "<pre>";
echo htmlspecialchars($json, ENT_QUOTES, "UTF-8");
echo "</pre>";
?>
Bu uygulamada öğrenci bilgileri JSON nesnesine dönüştürülerek ekrana yazdırılır.
ÖRNEK 2: JSON VERİLERİNİ OKUYARAK ÜRÜN BİLGİLERİNİ GÖSTERME
Bu uygulamada JSON formatındaki ürün bilgilerini PHP dizisine dönüştürerek ekrana yazdıracağız.
<?php
$json = '{
"urun": "Klavye",
"fiyat": 750,
"stok": 20
}';
$urun = json_decode($json, true);
echo "Ürün: " . $urun["urun"] . "<br>";
echo "Fiyat: " . $urun["fiyat"] . " TL<br>";
echo "Stok: " . $urun["stok"];
?>
Ekran Çıktısı:
Ürün: Klavye
Fiyat: 750 TL
Stok: 20
ÖRNEK 3: BİRDEN FAZLA ÖĞRENCİYİ JSON FORMATINDA LİSTELEME
Bu uygulamada birden fazla öğrencinin bilgilerini JSON formatında saklayıp foreach döngüsüyle listeleyeceğiz.
<?php
$json = '[
{"ad":"Ahmet","not":80},
{"ad":"Ayşe","not":95},
{"ad":"Mehmet","not":70}
]';
$ogrenciler = json_decode($json, true);
foreach ($ogrenciler as $ogrenci) {
echo "Ad: " . htmlspecialchars(
$ogrenci["ad"],
ENT_QUOTES,
"UTF-8"
);
echo " - Not: " . $ogrenci["not"];
echo "<br>";
}
?>
Ekran Çıktısı:
Ad: Ahmet - Not: 80
Ad: Ayşe - Not: 95
Ad: Mehmet - Not: 70
ÖRNEK 4: JSON DOSYASINA ÜRÜN BİLGİLERİ KAYDETME
Bu uygulamada birden fazla ürünün bilgilerini JSON dosyasına kaydedeceğiz.
<?php
$urunler = array(
array(
"ad" => "Mouse",
"fiyat" => 450
),
array(
"ad" => "Klavye",
"fiyat" => 750
),
array(
"ad" => "Monitör",
"fiyat" => 5000
)
);
$json = json_encode(
$urunler,
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
);
if ($json !== false) {
$sonuc = file_put_contents(
__DIR__ . "/urunler.json",
$json
);
if ($sonuc !== false) {
echo "Ürünler JSON dosyasına kaydedildi.";
}
}
?>
Bu uygulamada ürün bilgileri urunler.json dosyasına kaydedilir.
ÖRNEK 5: JSON DOSYASINDAN ÜRÜN LİSTESİ OLUŞTURMA
Bu uygulamada önceki örnekte oluşturduğumuz urunler.json dosyasındaki bilgileri okuyarak HTML tablosunda göstereceğiz.
<?php
$dosya = __DIR__ . "/urunler.json";
if (is_file($dosya)) {
$json = file_get_contents($dosya);
if ($json !== false) {
$urunler = json_decode($json, true);
if (json_last_error() === JSON_ERROR_NONE
&& is_array($urunler)) {
echo "<table border='1' cellpadding='8'>";
echo "<tr>";
echo "<th>Ürün</th>";
echo "<th>Fiyat</th>";
echo "</tr>";
foreach ($urunler as $urun) {
echo "<tr>";
echo "<td>" . htmlspecialchars(
$urun["ad"],
ENT_QUOTES,
"UTF-8"
) . "</td>";
echo "<td>" . $urun["fiyat"] . " TL</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "JSON verisi geçersiz.";
}
}
} else {
echo "Ürün dosyası bulunamadı.";
}
?>
Bu örnekte JSON dosyasındaki ürün bilgileri okunarak bir HTML tablosu oluşturulmuştur.
13. PHP JSON İŞLEMLERİNDE DİKKAT EDİLMESİ GEREKENLER
- JSON anahtarları çift tırnak içerisinde yazılmalıdır.
- JSON verilerinde son elemandan sonra virgül kullanılmamalıdır.
- Türkçe karakterleri okunabilir tutmak için JSON_UNESCAPED_UNICODE kullanılabilir.
- JSON verilerini düzenli göstermek için JSON_PRETTY_PRINT kullanılabilir.
- json_decode() fonksiyonunun ikinci parametresi true olduğunda JSON nesneleri PHP ilişkisel dizilerine dönüştürülür.
- JSON verileri işlenmeden önce geçerlilik kontrolü yapılmalıdır.
- JSON dosyalarına yazma işlemlerinde dosya izinleri kontrol edilmelidir.
- Kullanıcıdan gelen veriler doğrulanmalı ve HTML içerisinde görüntülenirken uygun biçimde güvenli hâle getirilmelidir.
14. ÖĞRENCİLER İÇİN UYGULAMA SORULARI
Uygulama 1: Ad, soyad, yaş ve şehir bilgilerinden oluşan bir PHP dizisi oluşturunuz. Bu diziyi JSON formatına dönüştürerek ekrana yazdırınız.
Uygulama 2: JSON formatında hazırlanmış bir ürün bilgisini json_decode() kullanarak PHP dizisine dönüştürünüz ve ürün bilgilerini listeleyiniz.
Uygulama 3: Beş farklı ders adından oluşan PHP dizisini JSON formatına dönüştürünüz. JSON verisini tekrar PHP dizisine çevirerek foreach ile listeleyiniz.
Uygulama 4: Üç farklı öğrencinin adını ve notunu içeren bir PHP dizisi oluşturunuz. Bu verileri JSON formatında bir dosyaya kaydediniz.
Uygulama 5: JSON dosyasında bulunan ürünlerin adlarını ve fiyatlarını HTML tablosunda görüntüleyen PHP uygulaması hazırlayınız.
15. SONUÇ
Bu dersimizde JSON veri formatının ne olduğunu ve PHP programlama dilinde JSON işlemlerinin nasıl gerçekleştirildiğini öğrendik.
json_encode() fonksiyonuyla PHP dizilerini JSON formatına dönüştürdük. json_decode() fonksiyonuyla JSON verilerini PHP nesnelerine ve ilişkisel dizilere çevirdik.
Ayrıca JSON_UNESCAPED_UNICODE ve JSON_PRETTY_PRINT seçenekleriyle JSON verilerini daha okunabilir biçimde oluşturduk.
Son olarak JSON verilerini dosyalara kaydetme, dosyalardan okuma ve HTML tablosunda listeleme uygulamaları geliştirdik.
JSON formatı, özellikle web servisleri, API uygulamaları, AJAX işlemleri ve farklı sistemler arasında veri alışverişi yapılması gereken projelerde yaygın olarak kullanılmaktadır.
Öğrendiğiniz bilgileri kendi bilgisayarınızda uygulayarak JSON verileriyle çalışma becerilerinizi geliştirebilirsiniz.