PHP ve JSON

Bugün sizlere PHP ve JSON ilişkisini anlatacağım.. JSON’ı temel olarak öğrendikten sonra, PHP’de bulunan JSON fonksiyonlarını ve ne işe yaradıklarını öğreneceğiz..Öncelikle JSON nedir sorusuna basit bir cevap verelim.. JSON, javascript Object Notation’ın kısaltması olup tıpkı XML gibi bir veri değişim formatıdır.

JSON Yapısı

jSON, object (nesne) ve array (dizi) olmak üzere 2 temel yapı içerir. Bu temel yapılar evrensel yapılardır ve tüm modern programlama dillerinde mevcuttur.

Object Yapısı

Bir nesne (object), { (süslü parantez) ile başlar ve } (süslü parantez) ile biter. Anahtar ve değer şeklinde tanımlanırlar.. Her anahtardan sonra : (iki nokta üstüste) kullanılır.. Anahtar/değer çiftleri birbirinden , (virgül) ile ayrılırlar.

Aşağıdaki resim object yapısını temsil etmektedir.

PHP ve JSON

Gördüğünüz gibi o kadarda karmaşık bir yapı değil.. Daha iyi pekiştirmek için hemen ilk örneğimizi yapalım ve bir nesne oluşturalım.

{
    "yeniNesne" : "nesne değeri"
}

Tebrikler, ilk json nesnemizi oluşturduk 🙂 Şimdi diğer yapıya (array) göz atalım..

Array Yapısı

Bir dizi (array), [ (köşeli parantez) ile başlar ve ] (köşeli parantez) ile biter. Sadece değer şeklinde tanımlanır.. Değerler birbirinden , (virgül) ile ayrılır.

Aşağıdaki resim array yapısını temsil etmektedir.

PHP ve JSON

Gördüğünüz gibi object yapısından biraz farklı.. Köşeli parantezlerle başlayıp bittiği gibi bir anahtar tanımlaması yok.. Yani dizi yapısında sadece değerleri bir arada tutuyoruz.. Bununla ilgili küçük bir örnek yapalım hemen.

["test1","test2"]

Örnekte gördüğünüz gibi dizi içerisinde 2 değer ve bu değerleri virgül ile ayırdık.

Value

Bir değer, çift tırnak içinde şu türleri barındırabilir.
string (yazı), true, false, null (boş değer), number (sayı), object (nesne) ve array (dizi)

PHP ve JSON

Bizim için şimdilik bu kadar bilgi yeterli.. Daha fazla bilgi edinmek için resmi adresine başvurabilirsiniz;
http://json.org/json-tr.html

PHP’de JSON Fonksiyonları

PHP bize JSON ile ilgili 2 fonksiyon sunuyor.. Bunların ilki json_encode() yani bir json formatı dönüştürücüsü ve ikincisi ise json_decode() yani bir json formatı çözücüsü.. Zaten temelde json işlemi içinde bu 2 fonksiyon yeterlidir.

json_encode()

Bir dizi ifadeyi json formatına dönüştürür.. Küçük bir örnek ile kullanımını görelim;

$array = array(
    "kadi" => "tayfun erbilen",
    "sifre" => "123456"
);
$json = json_encode($array);

echo $json;

Bu örneğin çıktısı aşağıdaki gibi olacaktır;

{
    kadi: "tayfun erbilen,
    sifre: "123456"
}

Bu fonksiyona ait birde 2. parametre vardır ancak zorunlu değildir.. 2. parametre değerleri parse etmek için kullanılan tip atamalarıdır.. Sırasıyla aşağıda inceleyelim;

JSON_HEX_TAG
Bütün < ve > karakterleri \u003C ve \u003E karakterlerine dönüştürülürler.

JSON_HEX_AMP
Bütün & karakterleri \u0026 karakterlerine dönüştürülürler.

JSON_HEX_APOS
Bütün karakterleri \u0027 karakterlerine dönüştürülürler.

JSON_HEX_QUOT
Bütün karakterleri \u0022 dönüştürülürler.

JSON_FORCE_OBJECT
İlişkisel olmayan dizi kullanıldığında çıktıların dizi yerine nesne olmasını sağlar.

json_decode()

JSON formatındaki veriyi çözer ve php’de kullanabileceğimiz hale getirir.. Yapısal olarak obje ve dizi halinde çevrilir. 3 parametre alır ancak sadece ilk parametre zorunludur. Bir örnek ile daha anlaşılır hale getirelim;

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
var_dump( json_decode($json) );

Bu işlemin çıktısı şöyle olacaktır;

stdClass Object
(
     [kadi] => tayfun erbilen
     [sifre] => 123456
)

Yani biz bu değerlere tam olarak şu şekilde erişebiliriz;

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
$data = json_decode($json)
echo $data->kadi; // tayfun erbilen
echo $data->sifre; // 123456

Fonksiyona 2. parametreyi true olarak atarsak nesne değil dizi olarak çözme işlemi yapacaktır.. O zamanda veriye erişimimiz yukarıdaki gibi değil aşağıdaki gibi olacaktır.

$json = '{"kadi" : "tayfun erbilen", "sifre" : "123456"}';
$data = json_decode($json, true)
echo $data['kadi']; // tayfun erbilen
echo $data['sifre']; // 123456

json_last_error()

JSON işleminde bir hata oluşup oluşmadığını bu fonksiyon ile kontrol edebiliriz. Bir hata olduğunda sayısal değer döndürecektir.. Bu sayısal değerler sırasıyla aşağıdaki sabitleri temsil etmektedir.

JSON_ERROR_NONE – Hata bulunamadı
JSON_ERROR_DEPTH – Azami yığın derinliği aşıldı (?)
JSON_ERROR_CTRL_CHAR – Denetim karakteri hatası, muhtemelen yanlış kodlanmış
JSON_ERROR_SYNTAX – Sözdizimi hatası
JSON_ERROR_UTF8 – UTF-8 karakter kodlama hatası, muhtemelen yanlış kodlanmış (Geçerlilik : PHP 5.3.1)

JSONView Eklentisi

PHP ve JSON

Tarayıcılarınız için JSON görüntüleme eklentisini kullanabilirsiniz.

Chrome: https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc
Firefox: https://addons.mozilla.org/en-US/firefox/addon/jsonview/

Örnekler

İlk olarak bu sitedeki rss.xml’in json halini yazalım..
http://www.erbilen.net/rss.xml

{
    "rss" : {
        "version" : "2.0",
        "channel" : {
            "title" : "Tayfun Erbilen",
            "link" : "http://www.erbilen.net/",
            "language" : "tr",
            "item" : [
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                },
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                },
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                },
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                },
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                },
                {
                    "title" : "ComarSever.Net",
                    "link" : "http://www.erbilen.net/projeler/482-comarsevernet.html",
                    "description" : "<![CDATA[Köpeğim çomar ve diğer tüm sokak hayvanları hakkında paylaşım yapabileceğim bir blog açtım.. Bu blog tamamen çomar ve diğer tüm sokak hayvanlarını ilgilendiren yazılar, videolar ve resimlerden ibaret olacak.. Bazen yüzünüzü güldürecek, bazen sizi üzecek yazılar olacak bu blogta.. Ne çok ütopik, ne çok gerçek yazılar olacak..]]>",
                    "category" : "<![CDATA[ Projeler ]]>"
                }
            ]
        }
    }
}

Linkler.in API’yi kullanarak php’de değerleri alıp kullanalım..
http://linkler.in/api

<?php

$file = file_get_contents('http://linkler.in/api/user/tayfunerbilen.json&count=10');
$json = json_decode($file);

foreach ( $json as $link ){
	echo '<h3>'.$link->link->link_title.'</h3><p>'.$link->link->link_desc.'</p><hr />';
}

?>

Yayınlayan

Tayfun Erbilen

2009'dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“PHP ve JSON” üzerine 16 yorum

  1. Ayrıca javascriptde de parse etme metodları vardı:
    JSON.parse, JSON.stringify gibi metodları vardı onları anlatmamışsınız(PHP kısmını anltmışsınız)

  2. @aliveli, birçok dilde mevcut. Benim ele aldığım konu php olduğu için sadece onları anlattım.

  3. merak ettiğim bir konunun daha ne olduğunu anladık. Daha öncede başka yazılarınızdan istifade ettiğim için bir mesaj bırakalım istedim. Çalışmalarınızda başarılar dilerim.

  4. Güzel çalışma olmuş eline sağlık. Yalnız ben Json için Localhost oluşturmayı beceremedim yardımcı olabilir misin?

  5. @Serdar, normal bir program kurmaktan farksız. XAMPP ya da MAMP bu ikisinden birini indirip kuruyorsun, daha sonra programı açıp apache’yi başlatıyorsun, dosyalarını kurduğun dizinin içine girip örneğin C->XAMPP->htdocs şeklinde htdocs klasörüne atıyorsun.

    Örneğin test.json diye attın. Erişirkern localhost/test.json şeklinde erişiyorsun. Yani htdocs’ta attığın her şey http://localhost adresinde gözüküyor.

    Kolay gelsin.

  6. json ve php’yi anlatan bir yazı yazmayı düşünüyordum ama bunu görünce vazgeçtim 🙂 Gayet güzel olmuş, eline sağlık

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir