Mengembalikan JSON dari PHP ke JavaScript?

138

Saya memiliki skrip PHP yang dipanggil melalui jQuery AJAX. Saya ingin skrip PHP mengembalikan data dalam format JSON ke javascript. Berikut kode pseudo dalam skrip PHP:

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

Pada dasarnya, saya membutuhkan hasil dari dua loop untuk dimasukkan ke dalam $ json.

AquinasTub
sumber

Jawaban:

195

Php memiliki fungsi JSON Serialising bawaan.

json_encode

json_encode

Silakan gunakan itu jika Anda bisa dan tidak menderita sindrom Not Invented Here.

Kent Fredric
sumber
2
Luar biasa terima kasih. Saya sebenarnya telah melihat ini sebelum memposting di SO, tetapi saya tidak berpikir itu akan tersedia di hosting saya.
AquinasTub
'Jawaban' ini tidak lengkap dan agak tidak berguna. Simak jawaban dari aesede untuk informasi lebih lengkapnya.
Funk Doc
@FunkDoc, OP yang dimaksud sedang merangkai JSON dengan tangan, dengan asumsi bahwa itu adalah satu-satunya pilihan mereka. Mengetahui bahwa itu bukan satu-satunya pilihan mereka adalah solusi yang cocok. Tidak ada kewajiban bahwa hasil akhir JSON tersebut akan dikeluarkan sebagai respons HTTP. Informasi "tambahkan tajuk", meskipun berguna untuk satu situasi, tidak akan membantu Anda jika apa yang Anda lakukan dengan JSON itu tidak hanya "mengembalikannya kata demi kata ke halaman web". Pertanyaan tersebut tidak menambahkan klarifikasi pada kasus penggunaan.
Kent Fredric
(Selain itu, pengaturan tajuk tidak sepenuhnya diperlukan untuk AJAX. Maaf jika saya tampak tiba-tiba, tetapi bayangan yang diberikan oleh kata "'jawaban' 'dalam tanda kutip benar-benar membuat saya bingung, itu 10 tahun yang lalu, biarkan saja mati. Saya telah pindah dari PHP begitu lama sehingga bahasa yang saya pindahkan sekarang juga menjauh.)
Kent Fredric
148

Berikut ini beberapa hal yang hilang dalam jawaban sebelumnya:

  1. Setel header di PHP Anda:

    header('Content-type: application/json');
    echo json_encode($array);
    
  2. json_encode()dapat mengembalikan larik JavaScript alih-alih objek JavaScript , lihat:
    Mengembalikan JSON dari Skrip PHP
    Ini mungkin penting untuk diketahui dalam beberapa kasus karena larik dan objek tidak sama.

aesede
sumber
2
Penting untuk dicatat bahwa data di- echo bukan dikembalikan ! Itu menggigit saya untuk sementara waktu ketika pertama kali mempelajari konsep tersebut. Karena dalam pemrograman umum, hampir semuanya biasanya dikembalikan bukan "dicetak".
Juha Untinen
Hai @Juha, perlu diingat bahwa json_encode()(seperti semua fungsi) selalu mengembalikan sesuatu (termasuk NULL); Anda dapat mencetak data, memprosesnya dan kemudian mencetaknya, memasukkannya ke variabel untuk digunakan nanti, menyimpannya ke file, dll ... Anda dapat membaca lebih lanjut tentang returndi PHP: Mengembalikan nilai . Anda juga dapat (dan harus!) Memeriksa apa yang dikembalikan oleh setiap fungsi yang tidak Anda ketahui, lihat contoh json_encode () yang menyatakan Mengembalikan string yang dikodekan JSON saat berhasil atau SALAH saat gagal.
aesede
Saat itu, saya bertanya-tanya mengapa return json_encode($jsonArray);tidak berhasil (AngularJS http.get tidak mendapatkan apa-apa), sampai saya kemudian menyadarinya :)
Juha Untinen
85

Ada bagian JSON dalam dokumentasi PHP. Anda akan membutuhkan PHP 5.2.0.

Mulai PHP 5.2.0, ekstensi JSON dibundel dan dikompilasi menjadi PHP secara default.

Jika tidak, inilah pustaka PECL yang dapat Anda instal.

<?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}
?>
Ólafur Waage
sumber
13

Biasanya Anda juga tertarik untuk memiliki beberapa struktur pada data Anda di pihak penerima:

json_encode($result)

Ini akan mempertahankan kunci array juga.

Ingatlah bahwa json_encode hanya bekerja pada data yang dienkode utf8.

Jukka Dahlbom
sumber
4

Anda dapat menggunakan Simple JSON untuk PHP . Ini mengirimkan tajuk yang membantu Anda memalsukan JSON.

Sepertinya :

<?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();
?>
Alexis Paques
sumber
Peringatan: JSON sederhana untuk PHP berlisensi GPLv2, jadi kode Anda sendiri harus open-source agar dapat menggunakannya.
Jamie Birch
1
Sekarang lisensi MIT :)
Alexis Paques
1
@JamieBirch Dalam praktiknya, saya pikir Anda salah paham tentang cara kerja GPL. Jika Anda berbicara tentang AGPL, maka Anda akan tertarik pada sesuatu. Tetapi screed internet yang luas dibangun di atas perangkat lunak GPL dan tidak berkewajiban untuk membuka kode mereka, karena mereka tidak memberikan pengguna apa pun yang dapat dieksekusi di bawah kendali mereka, hanya menyediakan antarmuka untuk itu. Satu-satunya kewajiban yang mereka miliki adalah bahwa siapa pun yang mereka berikan salinan digital dari proyek tersebut juga harus diberi sumber.
Kent Fredric
1

$ msg = "Anda Memasukkan Nama Pengguna ATAU Kata Sandi yang Salah"; $ responso = json_encode ($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
iamasp
sumber