2009-03-25 80 views
105

Tengo un script PHP que se llama a través de jQuery AJAX. Quiero que el script PHP devuelva los datos en formato JSON al javascript. Aquí está el pseudo código en el script PHP:Devolver JSON de PHP a JavaScript?

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

Básicamente, necesito los resultados de los dos bucles para que se inserten en $ JSON.

Respuesta

170

Php tiene una función incorporada de serialización JSON.

json_encode 

json_encode

favor uso que si se puede y no sufren no inventado aquí síndrome.

+2

Excelente, gracias. De hecho, había buscado esto antes de publicar en SO, pero no creía que estuviera disponible en mi hosting. – AquinasTub

79

Hay un JSON section en la documentación de PHP. Necesitarás PHP 5.2.0 sin embargo.

A partir de PHP 5.2.0, la extensión JSON se incluye y compila en PHP de forma predeterminada.

Si no lo tiene, aquí está el PECL library que puede instalar.

<?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} 
?> 
+1

Buen ejemplo. Gracias. –

13

Por lo general, usted estaría interesado en tener también algún tipo de estructura a sus datos en el extremo receptor:

json_encode($result) 

Esto conservará las claves de matriz también.

Recuerda que json_encode solo funciona en datos con codificación utf8.

0

Puede usar Simple JSON for PHP. Envía los encabezados que te ayudan a forjar el JSON.

que parece:

<?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(); 
?> 
+1

$ object = new stdClass(); ¡me ayudó! gracias;) – ivahidmontazer

+0

Advertencia: Simple JSON para PHP tiene licencia GPLv2, por lo que su propio código debe ser de código abierto para poder usarlo. –

87

Aquí hay un par de cosas que faltan en las respuestas anteriores:

  1. cabecera de set en su PHP:

    header('Content-type: application/json'); 
    echo json_encode($array); 
    
  2. json_encode() puede devolver un JavaScript matriz en lugar de JavaScript objeto, vea:
    Returning JSON from a PHP Script
    Esto podría ser importante saber en algunos casos, ya que las matrices y los objetos no son lo mismo.

+0

¡Es importante tener en cuenta que los datos están ** eco ** ed en lugar de ** return ** ed!Eso me mordió por un buen tiempo cuando primero aprendí el concepto. Porque en la programación general, casi todo se devuelve generalmente no "impreso". –

+0

Hola @Juha, ten en cuenta que 'json_encode()' (como todas las funciones) siempre devuelve algo (incluido 'NULL'); puede imprimir los datos, procesarlos y luego imprimirlos, asignarlos a una variable para su uso posterior, guardarlos en un archivo, etc. ... Puede leer más sobre 'return' en [PHP: Valores devueltos] (http : //php.net/manual/en/functions.returning-values.php). También puede (¡y debería!) Comprobar qué devuelve cada función que no conoce, consulte nuestro ejemplo [json_encode()] (http://php.net/manual/en/function.json-encode.php) indica _Devuelve una cadena codificada JSON en caso de éxito o FALSE en caso de error._ – aesede

+0

En ese momento, me preguntaba por qué 'return json_encode ($ jsonArray);' no funcionaba (AnggleJS http.get no obtenía nada), hasta que más tarde lo notó :) –