v2.5.2
Giriş yap

JSON'dan Veritabanına Kayıt

mcfearcombat
545 defa görüntülendi

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 ?

Cevap yaz
Cevaplar (4)
ebykdrms
925 gün önce

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ş.";
mcfearcombat
925 gün önce
    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.

mcfearcombat
925 gün önce

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 ?

ebykdrms
926 gün önce

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.