- Konu sahibi
- #1
PHP’de JSON verisini okumak için önce JSON metnini bir değişkene alın, ardından
Aşağıdaki örnek PHP 7.3 veya üzerini kullanır. Varsayımsal bir kullanıcı verisi için
Aynı klasörde
Komut satırında dosyaların bulunduğu klasöre gidip
“JSON dosyası okunamadı” mesajında dosya adını,
Tanılama yaparken hata ayrıntılarını yalnız güvenli sunucu kayıtlarında inceleyin; JSON içeriğini, parolaları veya erişim anahtarlarını ziyaretçilere göstermeyin. Geçici tanılama çıktısını sorun giderildiğinde kaldırın.
Bir istemci JSON’u HTTP isteğinin gövdesinde gönderiyorsa dosya yolu yerine ham gövdeyi okuyun:
Okuma sonucunu
json_decode() ile PHP değerine dönüştürün. İkinci parametreyi true verirseniz JSON nesnelerine dizi anahtarlarıyla erişebilirsiniz. Dosyadan okurken dosya hatasını, dönüştürürken de JSON hatasını ayrı ele alın.JSON dosyasını okuyup değerlerine erişme
Aşağıdaki örnek PHP 7.3 veya üzerini kullanır. Varsayımsal bir kullanıcı verisi için
veri.json adlı dosyayı oluşturup UTF-8 olarak kaydedin:
JSON:
{
"ad": "Deniz",
"yas": 28,
"ilgi_alanlari": ["PHP", "Web"]
}
Aynı klasörde
oku.php oluşturun ve aşağıdaki kodu kaydedin. __DIR__, JSON dosyasının PHP dosyasıyla aynı klasörde aranmasını sağlar.
PHP:
<?php
$metin = file_get_contents(__DIR__ . '/veri.json');
if ($metin === false) {
exit('JSON dosyası okunamadı.');
}
try {
$veri = json_decode($metin, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
exit('JSON çözümlenemedi.');
}
if (!is_array($veri) || !isset($veri['ad'], $veri['ilgi_alanlari'][0])) {
exit('Beklenen alanlar bulunamadı.');
}
echo $veri['ad'] . PHP_EOL;
echo $veri['ilgi_alanlari'][0] . PHP_EOL;
Komut satırında dosyaların bulunduğu klasöre gidip
php oku.php çalıştırın. Çıktıda ayrı satırlarda Deniz ve PHP görürsünüz. İlk değer nesnenin ad alanından, ikincisi ilgi_alanlari listesinin sıfır numaralı elemanından gelir.json_decode() içindeki 512 izin verilen iç içe geçme derinliğidir; JSON_THROW_ON_ERROR ise çözümleme başarısız olduğunda yakalanabilen bir hata oluşturur. Başarılı çözümleme, verinin uygulamanızın beklediği alanları veya değerleri taşıdığını garanti etmez. Bu nedenle örnek, kullanacağı alanları ayrıca kontrol eder; gerçek uygulamada alanların türlerini ve izin verilen değerlerini de doğrulayın.Okuma ve çözümleme hatalarını ayırma
“JSON dosyası okunamadı” mesajında dosya adını,
veri.json dosyasının konumunu ve PHP işleminin okuma iznini kontrol edin. Dosya okunup “JSON çözümlenemedi” mesajı çıkarsa içeriğin UTF-8 olduğunu, anahtarların çift tırnakla yazıldığını ve son elemandan sonra fazladan virgül bulunmadığını kontrol edin.JSON_THROW_ON_ERROR kullanmayan bir çağrıda null sonucu tek başına hata olduğunu göstermez: JSON içindeki geçerli null değeri de aynı sonucu üretir. Bu yöntemi kullanıyorsanız çağrının hemen ardından json_last_error() ile hata durumunu kontrol edin.Tanılama yaparken hata ayrıntılarını yalnız güvenli sunucu kayıtlarında inceleyin; JSON içeriğini, parolaları veya erişim anahtarlarını ziyaretçilere göstermeyin. Geçici tanılama çıktısını sorun giderildiğinde kaldırın.
İstek gövdesinden JSON okuma
Bir istemci JSON’u HTTP isteğinin gövdesinde gönderiyorsa dosya yolu yerine ham gövdeyi okuyun:
PHP:
$metin = file_get_contents('php://input');
Okuma sonucunu
false açısından kontrol ettikten sonra aynı json_decode() ve alan doğrulama adımlarını uygulayın. İstemciye JSON gönderdiğini belirtmek için Content-Type: application/json başlığını kullanmasını söyleyin. Gövdenin boş olması veya geçersiz JSON içermesi çözümleme hatasıdır; geçerli JSON gelmesi ise tek başına beklenen alanların bulunduğunu kanıtlamaz.