Javascript Object Notation formatı ile gün gelir karşılaşabilirsiniz, aynen bugün benim karşılaştığım gibi 🙂 Görünüm olarak PHP’nin serialize fonksiyonu ile elde ettiğimiz yapıya benziyor fakat unserialize fonksiyonu bunu çözmede işe yaramıyor(muş). Araştırmalarım sonunla karşılaştığım bu formatın JSON olduğunu anladım ve çözme fonksiyonunu araştırdım.
JSON(Javascript Object Notation) Nedir?
Vikipedi diyor ki;
Açılımı “Javascript Object Notation“, basit ve kullanışlı veri tutuş formatıdır.XML’in Javascript ile çok da iyi kullanılamamasından ötürü tercih edilir, klasik dom ağaçlarından farksız bir yapıya sahiptir.
Şu veri tiplerini destekler:
- Number
- String
- Boolean
- Array
- Object
- null
Örnek bir kod;
[CODE] “tip”: “kitap”,
“tur”: “roman”,
“urunler”: [
{“ad”: “Ihtiyar Kemanci”, “yazar”: “Nihat Genc”},
{“ad”: “Su Cilgin Turkler”, “yazar”: “Turgut Ozakman”},
{“ad”: “Kafa Tutan Gunler”, “yazar”: “Esat Korkmaz”}
][/CODE]
PHP5 Destekliyor
Güzelim pehepem beşim 😛 herbir yeniliği sunduğu gibi JSON fonksiyonlarını da bizlere sunmuş. Fakat PHP sürümünün 5.2.0 ya da üstü olması gerekiyor.
JSON kütüphanesi sadece 2 adet fonksiyondan oluşuyor. Bunlardan ilki json_encode değerinizin JSON olarak gösterimini veriyor. Sonuncu fonksiyon olan json_decode ise JSON gösteriminin açılımını veriyor.
Peki PHP 5.2.0 altındaki sürümler ile ne yapacağız?
Korkmak, sıkılmak ve gerilmek yok PHP ‘de.. Herşeyin bir kütüphane dosyası bulunduğu gibi, JSON için de bir kütüphane yer alıyor. Yani bilindik adıyla Class diyoruz bunlara.
Services_JSON Kütüphanesi
Eğer PHP sürümünüz JSON kütüphanesini içermiyorsa, Services_JSON yardımımıza yetişiyor. Michal Migurski tarafından hazırlanan bu kütüphane ile PHP 5.2.0 altındaki sürümlerde JSON ile çalışabilirsiniz.
Services_JSON kütüphanesini buraya tıklayarak indirebilirsiniz. Paket içerisinde birçok dosya ve kullanım dokümanları yer alıyor. Fakat işimize yarayacak olan JSON.php dosyası.
Kütüphanenin kullanımı çok basit. Biz sadece encode ve decode fonksiyonlarını inceleyeceğiz. Şöyleki;
include('JSON.php');
$json = new Services_JSON();
$degerler = array('tip'=>'kitap', 'tur'=>'roman', 'urunler'=>array(array('ad'=>'Ihtiyar Kemanci', 'yazar'=>'Nihat Genc'), array('ad'=>'Su Cilgin Turkler', 'yazar'=>'Turgut Ozakman'), array('ad'=>'Kafa Tutan Gunler', 'yazar'=>'Esat Korkmaz'),));
$kodlanmis = $json->encode($degerler);
echo $kodlanmis;
Yukarıdaki örnek ile dizi değişkenimizi JSON formatına çevirmiş olduk ve yazımızın başındaki örnek kodlamayı elde ettik. Yani şu şekilde;
[CODE]{“tip”:”kitap”,”tur”:”roman”,”urunler”:[{“ad”:”Ihtiyar Kemanci”,”yazar”:”Nihat Genc”},{“ad”:”Su Cilgin Turkler”,”yazar”:”Turgut Ozakman”},{“ad”:”Kafa Tutan Gunler”,”yazar”:”Esat Korkmaz”}]}[/CODE]
Şimdi elde ettiğimiz bu JSON formatını tekrar eski haline dönüştürelim. Fakat dikkat etmemiz gereken nokta, elde edeceğimiz açılmış değerin dizi değişken değil nesne tabanlı olacağıdır.
include('JSON.php');
$json = new Services_JSON();
$kodlanmis = '{"tip":"kitap","tur":"roman","urunler":[{"ad":"Ihtiyar Kemanci","yazar":"Nihat Genc"},{"ad":"Su Cilgin Turkler","yazar":"Turgut Ozakman"},{"ad":"Kafa Tutan Gunler","yazar":"Esat Korkmaz"}]}';
$degerler = $json->decode($kodlanmis);
print_r($degerler);
Ve sonrasında alttaki nesne modelini elde ettik.
[CODE]stdClass Object
(
[tip] => kitap
[tur] => roman
[urunler] => Array
(
[0] => stdClass Object
(
[ad] => Ihtiyar Kemanci
[yazar] => Nihat Genc
)
[1] => stdClass Object
(
[ad] => Su Cilgin Turkler
[yazar] => Turgut Ozakman
)
[2] => stdClass Object
(
[ad] => Kafa Tutan Gunler
[yazar] => Esat Korkmaz
)
)
)
[/CODE]