araç köşesi

JSON'dan PHP Dizisine Çevirme (ve Tersi)

JSON metnini PHP dizisi koduna, PHP dizisini JSON'a çevirin; tırnak, kaçış ve anahtar kuralları PHP'deki gibi uygulanır

Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.

Nasıl çalışır?

Bir API yanıtını ya da ayar dosyasını PHP kodunun içine sabit dizi olarak koymak için JSON'u elle çevirmek gerekir: süslü parantezler köşeli paranteze, iki nokta "=>" işaretine döner, her metin de PHP'nin tırnak kurallarıyla yeniden yazılır. JSON metnini sol panele yapıştırın; sağ panelde "<?php" ile başlayan, doğrudan kaydedilip include edilebilen kod oluşur. Örnekteki "adres" nesnesi iç içe anahtarlı diziye, "etiketler" listesi anahtarsız diziye çevrilir; "'el yapımı'dır" metnindeki tek tırnaklar kaçışla korunur, satır sonu içeren açıklama ise "\n" yazılabilsin diye çift tırnakla yazılır. Değişken adını boş bırakırsanız kod return [...]; olur; Laravel ve Symfony'nin config dosyaları bu biçimi bekler. Ters yönde bir PHP dizisini yapıştırın (başında $veri = ya da return olabilir): sonuç PHP'nin json_encode fonksiyonunun vereceği JSON'un aynısıdır, yalnız Türkçe harfler \u00e7 gibi kaçışa çevrilmeden okunur halde kalır.

Bu araç json to php array, php array to json, json'dan php array, json_decode dizi aramalarıyla da biliniyor.

PHP dizisi (array) nedir?

PHP dizisi, sıralı anahtar-değer çiftlerinden oluşan tek veri yapısıdır; aynı yapı hem 'elma', 'armut' gibi bir liste hem de 'il' => 'Bursa' gibi adlı alanları olan bir kayıt olarak kullanılır. Anahtar tamsayı ya da metin olabilir, değer ise metin, sayı, true/false, null ya da başka bir dizi. JSON'daki dizi ve nesne ayrımı PHP'de yoktur; çeviride bu farkı anahtarların sırası belirler.

json_encode ve json_decode nedir?

json_encode, PHP değerini JSON metnine; json_decode ise JSON metnini PHP değerine çeviren yerleşik fonksiyonlardır. json_decode varsayılan olarak JSON nesnelerini stdClass nesnesine çevirir; ikinci parametre true verilirse sonuç bu sayfanın ürettiği gibi iç içe dizilerdir. json_encode varsayılan olarak Türkçe harfleri \u kaçışına, eğik çizgiyi \/ biçimine çevirir; JSON_UNESCAPED_UNICODE ve JSON_UNESCAPED_SLASHES seçenekleri bunu kapatır.

JSON ile PHP dizisi arasındaki fark nedir?

JSON, diller arasında veri taşımak için tanımlanmış bir metin biçimidir: anahtarlar her zaman çift tırnaklı metindir, sondaki virgül, yorum satırı ve tek tırnak yasaktır. PHP dizisi ise PHP kodunun parçasıdır: tek tırnaklı metin, tamsayı anahtar, sondaki virgül ve yorum serbesttir, ama yalnız PHP okuyabilir. Veriyi başka bir programa, tarayıcıya ya da API'ye göndereceksiniz JSON; PHP projenizin içinde sabit ayar ya da test verisi olarak tutacaksanız PHP dizisi uygundur.

PHP dizisi JSON'a çevrilirken ne değişir

PHP'de dizi tek bir yapıdır: hem sıralı liste hem anahtar-değer tablosu olarak kullanılır. JSON'da ise bu iki şey ayrıdır: köşeli parantezli dizi ve süslü parantezli nesne. Bu sayfa json_encode ile aynı kuralı uygular: anahtarlar 0'dan başlayıp boşluksuz ve sırayla artıyorsa JSON dizisi, tek bir anahtar bile farklıysa JSON nesnesi yazılır. Bu yüzden [3 => 'x', 1 => 'y'] gibi bir dizi {"3": "x", "1": "y"} nesnesine döner; boş dizi ise her zaman [] olur, {} olmaz.

Anahtarlar da PHP'nin kendi kurallarıyla okunur. '7' gibi tamsayı görünümlü metin anahtar 7 sayısına çevrilir ama '07' metin kalır; true anahtarı 1, null anahtarı boş metin olur. Aynı anahtar iki kez yazılmışsa PHP'de olduğu gibi son değer kalır ve ilk yerinde durur; sonuç satırı kaç anahtarın tekrarlandığını söyler. Anahtarsız yazılan öğe, o ana kadarki en büyük tamsayı anahtarın bir fazlasını alır.

  • ['a', 'b'] → ["a", "b"] (sıralı liste JSON dizisi kalır)
  • [1 => 'a', 2 => 'b'] → {"1": "a", "2": "b"} (0'dan başlamıyor)
  • ['7' => 'x'] → anahtar 7 sayısı olur; '07' metin kalır
  • 1.0 → 1.0 (float korunur), 0x1A → 26, 1_000 → 1000

Neler çevrilemez: sabitler, fonksiyonlar, değişkenli metin

Bu araç PHP kodunu çalıştırmaz, yalnız sabit değerleri okur: tek ve çift tırnaklı metin, tamsayı, ondalıklı sayı, true, false, null ve iç içe diziler. PHP_EOL, __DIR__ gibi sabitler, date() gibi fonksiyon çağrıları, 'a' . 'b' birleştirmesi ya da "Merhaba $ad" gibi değişken içeren çift tırnaklı metin değerini ancak program çalışınca alır; araç bunları tahmin etmek yerine satır ve sütun numarasıyla durur. Böyle bir dizi için değeri elle yazın ya da PHP'de echo json_encode($dizi); çalıştırın.

Ters yönde dikkat edilecek nokta büyük tamsayılardır. JSON'daki 12345678901234567890 gibi bir sayı PHP'nin 64 bitlik tamsayı sınırını (9223372036854775807) aşar; PHP bu satırı okurken sayıyı float'a çevirir ve son haneler yuvarlanır. Kimlik numarası, kart ya da barkod numarası gibi hesaplama yapılmayacak uzun sayıları JSON'da metin (tırnak içinde) tutmak bu kaybı önler.

Sık sorulanlar

JSON PHP dizisine nasıl çevrilir?

JSON metnini bu sayfanın sol paneline yapıştırın; sağ panelde $veri = [...]; biçiminde PHP kodu oluşur. Kod içinde çalışma anında çevirmek isterseniz PHP'de json_decode($metin, true) kullanın; ikinci parametre true olmazsa sonuç dizi değil stdClass nesnesi olur.

PHP dizisi JSON'a nasıl çevrilir?

Diziyi $veri = [...]; ya da return [...]; satırıyla birlikte sol panele yapıştırın; yön kendiliğinden PHP → JSON olur. Sonuç json_encode($veri, JSON_PRETTY_PRINT) çıktısıyla aynıdır; tek fark, Türkçe harflerin \u00fc gibi kaçış dizisine çevrilmeden okunur halde kalmasıdır (PHP'de JSON_UNESCAPED_UNICODE seçeneğinin yaptığı gibi).

Kısa dizi yazımı [ ] ile array( ) arasında fark var mı?

Hayır, ikisi aynı diziyi üretir. Köşeli parantezli kısa yazım PHP 5.4'ten (2012) beri vardır ve bugünkü kod standartlarında tercih edilir. Kodunuz PHP 5.3 ya da daha eski bir sunucuda çalışacaksa ayarlardan array( ) yazımını seçin.

Metinler neden bazen tek, bazen çift tırnakla yazılıyor?

PHP'de tek tırnaklı metin, içindeki \n ve $ işaretini olduğu gibi bırakır; bu yüzden çıktıda varsayılan tek tırnaktır ve yalnız ters eğik çizgi ile tek tırnak kaçışla yazılır. Metinde satır sonu ya da sekme gibi görünmeyen bir karakter varsa çift tırnak kullanılır, çünkü \n kaçışı yalnız çift tırnak içinde satır sonu anlamına gelir; bu durumda $ işareti de \$ olarak yazılır ki değişken sanılmasın.

Yapıştırdığım veri bir sunucuya gönderiliyor mu?

Hayır. JSON ve PHP okuma, çeviri ve dosyanın hazırlanması tamamen tarayıcınızda yapılır; veritabanı şifresi ya da API anahtarı içeren bir ayar dizisi bile bu sayfadan dışarı çıkmaz.