JSON'dan Veritabanına Kayıt
Merhaba,
cURL ile çektiğim bir json verisi mevcut bunu json_decode komutu ile çözümleyip okuyabiliyorum. Bu dosyanın içerisinde birçok veri mevcut ve ben bazılarını veritabanına kaydetmek istiyorum. Burada json'ı hiç decode etmeden mi okuma yöntemi uygulanır, yoksa decode ettikten sonra nasıl bir proses izlemem lazım fikir verebilirmisiniz ?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
print_r()
ile echo
farklı şekilde çalışıyorlar. echo
komutu karşısındaki ifadenin bir string
olduğunu varsayar. Siz echo $cikti_json;
komutunu verdiğinizde echo
'ya bir string
değil bir array
veriyorsunuz.
print_r()
fonksiyonu içeriğindeki yapıya göre kendince bir formatta çıktı üretir.
Aslında echo
'nun amacı gerçekten ekrana bi'şeyler yazdırmakken print_r()
'nin amacı programcıya bir değerin değerini göstermektir. İkisinin hedef kitlesi farklı.
Kısacası, bir PHP array'ını echo ile ekrana yazdıramazsınız. Size array'ın içeriğini yazmak yerine sadece "Array" yazar.
Siz eğer $cikti_json
değişkeninizdeki değerleri yazdırmak istiyorsanız onlara ayrı ayrı ulaşıp echo
komutunu kullanmalısınız.
Örneğin şöyle bir json veriniz var diyelim:
[
{ "ad": "B. Kağan", "soyad": "ATAGÜN" },
{ "ad": "Tayfun", "soyad": "ERBİLEN" }
]
Siz bu değeri json_decode()
fonksiyonuyla $cikti_json
değişkenine aldınız:
$cikti_json=json_decode('[{ "ad": "B. Kağan", "soyad": "ATAGÜN" }, { "ad": "Tayfun", "soyad": "ERBİLEN" }]');
Şu şekilde, dizinizdeki kişilerin ad-soyad bilgilerini ekrana yazdırabilirsiniz:
for($i = 0; $i < count($cikti_json); $i++) {
echo "<div><strong>Ad:</strong> {$cikti_json[$i]->ad} - <strong>Soyad:</strong> {$cikti_json[$i]->soyad}</div>;
}
foreach
ile yapmak için:
foreach($cikti_json as $item) {
echo "<div><strong>Ad:</strong> {$item->ad} - <strong>Soyad:</strong> {$item->soyad}</div>;
}
NOT: json_decode()
komutu json içindeki array'ları kendi Array'ına, object'leri de kendi stdClass'ına çeviriyor'ına çeviriyor. stdClass içeriğine erişmek için dizilerdeki gibi [ ]
içine key yazmak yerine ->
ifadesinden sonra key yazmak gerekiyor.
Başka bir örnek vereyim. Bu sefer json bir dizi değil sadece object olsun.
$cikti_json=json_decode('{ "customer": "Emre", "shipmentAddress": "Samsun" }');
echo "Müşteri {$cikti_json->customer} için teslimat adresi {$cikti_json->shipmentAddress} olarak belirtilmiş.";
foreach($cikti_json as $key => $value){
$orderNum=$value["orderNumber"];
echo $orderNum ."<br/>";
}
bu şekilde foreach ile tüm belirtilen etiketleri çekmede de başarılı olamadım ne yazik ki sorunum nerede anlayamadım.
efendim cevabını için teşekkür ederim ancak şöyle bir problem yaşamaktayım.
$cikti_json=json_decode($cikti);
echo "<pre>";
print_r($cikti_json);
bu şekilde kullandığımda sorunsuz ekrana tüm verileri yazdırıyorum ancak
$cikti_json=json_decode($cikti, true);
echo $cikti_json['shipmentAddress'];
bu şekilde diziyi çözüp yazdırmaya çalıştığımda herhangi bir çıktı alamıyorum, ne tür bir hata yapmaktayım acaba ?
Merhaba. json'u decode edip bir PHP dizisi haline geirdikten sonra işlemlerinizi yapmanız daha uygun olacaktır. Aksi halde json'un string hali üzerinde, yani aslında düz bir metin üzerinde arama yaparak işlemlerinizi yapmanız gerekir ve bu çok sağlıklı olmaz. Hatta kodunuz geliştikçe json_decode()
'nin yaptığı işi kendiniz yapmak zorunda kalabilirsiniz.
json_decode()
ile değerleri PHP array'ına çevirdikten sonra veriler üzerinde istediğiniz gibi döngüler kurabilir, istediğiniz değerleri kolayca başka değişkenlere atayıp buradan insert işleminizi gerçekleştirebilirsiniz.