JSON'u PHP'den JavaScript'e mi döndürüyorsunuz?


135

Ben jQuery AJAX ile çağrılan bir PHP komut dosyası var. PHP komut dosyası javascript JSON biçiminde veri döndürmek istiyorum. İşte PHP betiğindeki sözde kod:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

Temel olarak, döngülerin $ json'a eklenebilmesi için iki sonuca ihtiyacım var.

Yanıtlar:


194

Php dahili JSON Serileştirme işlevine sahiptir.

json_encode

json_encode

Not Invented Here sendromuna yakalanabiliyorsanız ve yoksa, lütfen bunu kullanın.


2
Harika teşekürler. Aslında SO göndermeden önce bu baktı, ama benim barındırma kullanılabilir olacağını düşünmüyordu.
AquinasTub

Bu 'cevap' tam değildir ve oldukça yararlı değildir. Daha ayrıntılı bilgi için aesede'nin cevabına bakınız.
Funk Doc

@FunkDoc, OP'nin tek seçimleri olduğu varsayımıyla JSON'u elle birleştiriyordu. Onların tek seçimi olmadığını bilmek uygun bir çözümdü. Orada hiçbir o JSON Sonuç HTTP yanıtı olarak yayılan olacağını yükümlülük. "Üstbilgi ekle" bilgileri, bir durum için yararlı olsa da, bu JSON ile yaptığınız şey "sözlü olarak web sayfasına döndürmüyorsanız" size yardımcı olmaz. Soru, kullanıcı tabanına açıklama getirmedi.
Kent Fredric

(Ayrıca, başlık ayarlamak AJAX için kesinlikle gerekli değildir. Aniden görünüyorsa, özür dilerim, ancak tırnak içinde "cevap" kelimesinin verdiği gölge beni gerçekten yaraladı, 10 yıl önce, zaten ölmesine izin ver. PHP'den o kadar uzun zaman önce taşındım ki taşındığım dil şimdi de uzaklaşıyorum.)
Kent Fredric

145

Önceki cevaplarda eksik olan birkaç şey:

  1. PHP'nizde başlık ayarlayın:

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()JavaScript nesnesi yerine bir JavaScript dizisi döndürebilir , bkz: PHP Komut Dosyasından JSON Döndürme Bazı durumlarda diziler ve nesneler aynı olmadığından bilmek önemli olabilir.


2
Verilerin geri gönderilmek yerine yankılandığına dikkat etmek önemlidir ! Kavramı ilk öğrendiğimde bu beni iyi bir şey için ısırdı. Çünkü genel programlamada hemen hemen her şey "basılı" olarak döndürülmez.
Juha Untinen

Hey @Juha, json_encode()(tüm işlevler gibi) her zaman bir şeyler döndürdüğünü (dahil NULL) unutmayın; verileri yazdırabilir, işleyebilir ve sonra yazdırabilir, daha sonra kullanmak üzere bir değişkene atayabilir, bir dosyaya kaydedebilir vb return. PHP hakkında daha fazla bilgi edinebilirsiniz : Değerleri döndürme . Ayrıca size (ve!) Her işlevi döner bilmiyorum ne için onay, bizim örnek görebilirsiniz () json_encode o devletler bir JSON başarısızlık başarı veya false üzerinde dize kodlanmış İade.
aesede

O zamanlar, return json_encode($jsonArray);daha sonra fark edene kadar neden işe yaramadığını merak ediyordum (AngularJS http.get bir şey almadı)
Juha Untinen

83

PHP'nin belgelerinde bir JSON bölümü var. Yine de PHP 5.2.0'a ihtiyacınız olacak.

PHP 5.2.0'dan itibaren, JSON uzantısı varsayılan olarak paketlenir ve PHP'de derlenir.

Eğer yoksa, burada PECL kütüphane yükleyebilirsiniz.

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

13

Genellikle, alıcı uçtaki verileriniz için bazı yapılara sahip olmakla da ilgilenirsiniz:

json_encode($result)

Bu, dizi anahtarlarını da koruyacaktır.

Json_encode'un sadece utf8 kodlu verilerde çalıştığını unutmayın.


4

PHP için Basit JSON kullanabilirsiniz . Başlıkları JSON'u kurmanıza yardımcı olur.

Şöyle görünüyor:

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>

Uyarı: PHP için basit JSON GPLv2 lisanslıdır, bu nedenle kullanmak için kendi kodunuzun açık kaynak olması gerekir.
Jamie Birch

1
Şimdi MIT lisansı :)
Alexis Paques

1
@JamieBirch Pratikte, GPL'nin nasıl çalıştığını yanlış anladığınızı düşünüyorum. AGPL hakkında konuşuyorsanız, o zaman bir şeye giderdiniz. Ancak internetin büyük şapları GPL yazılımı üzerine inşa edilmiştir ve kodlarını açma yükümlülüğü altında değildir, çünkü kullanıcılara kontrolleri altında herhangi bir yürütülebilir dosya vermezler, sadece bir arayüz sağlarlar. Sahip oldukları tek yükümlülük, projenin dijital kopyalarını verdikleri herkese de kaynak verilmesi gerektiğidir.
Kent Fredric

1

$ msg = "Yanlış Kullanıcı Adı VEYA Şifre Giriyorsunuz"; $ Responso = json_encode ($ Msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.