Crear JSON con PHP

JSON (JavaScript Object Notation) el formato de intercambio de datos basado en objetos javascript es ampliamente utilizado por la facilidad para codificar y decodificar y por su poco tamaño, en esta ocasión presentamos la forma de generar estos datos con PHP.

JSON con PHP4

En PHP4 JSON no es manejado nativamente por lo cual necesitamos una clase, para ello tenemos JSON.php una clase escrita por Michal Migurski el cual tiene dos métodos encode y decode para manipular rápidamente datos en formato JSON.

Entonces para utilizar esta clase, la incluimos al inicio de nuestro script, y creamos una variable de la clase Services_JSON, luego de ello creamos un array con la información que deseamos codificar y luego utilizamos el método encode.

require_once("JSON.php");	
$json = new Services_JSON;
$data = array("nombre" => "Albert", "apellido" => "Camus");
echo $json->encode($data);

Esto es con un array sencillo, veamos si utilizamos un array multidimensional, por ejemplo un listado de autores.

require_once("JSON.php");	
$json = new Services_JSON;
$data[0] = array("nombre" => "Albert", "apellido" => "Camus");
$data[1] = array("nombre" => "Ernesto", "apellido" => "Sabato");
echo $json->encode($data);

Pueden ver el resultado de este ejemplo en data.php. Ahora si queremos hacer un ejemplo mas complejo, podemos extraer los datos de una tabla de una base de datos MySQL, con lo cual nuestro código sería de la forma:

require_once("JSON.php");
$json = new Services_JSON;
$conexion = mysql_connect("localhost", "usuario", "clave");
mysql_select_db("demo", $conexion);

$queEmp = "SELECT * FROM empresa ORDER BY nombre ASC";
$resEmp = mysql_query($queEmp, $conexion) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);

while ($rowEmp = mysql_fetch_assoc($resEmp)) {
	$data[] = $rowEmp;
}
echo $json->encode($data);

El resultado de este ejemplo lo pueden ver en mysql.php y como pueden ver la generación de datos en formato JSON es muy sencillo.

JSON con PHP5

A partir de la versión 5.2.0 de PHP fueron añadidas las funciones json_encode y json_decode para manipular nativamente datos en JSON, luego nuestro segundo ejemplo se reduciría al siguiente código:

$data[0] = array("nombre" => "Albert", "apellido" => "Camus");
$data[1] = array("nombre" => "Ernesto", "apellido" => "Sabato");
echo json_encode($data);

Obviamente el código es mas pequeño y tiene mejor rendimiento. Ahora esta forma de generar los datos en formato JSON combinado con Javascript, Mootools o con Flash pueden hacer de nuestras web verdaderas aplicaciones interactivas.

[download id=»5″ autop=»false»]

Comentarios Total 19 comentarios

josepex
Publicado: 24/11/2008 1:28 am

Gracias Jim justo estaba haciendo un proyecto con json y me facilitaste la vida XD.
Salu2 y como dices: siempre tratando de dar el 100% del esfuerzo.

Andros
Publicado: 24/11/2008 2:38 pm

No entiendo muy bien el uso de JSON en Flash.
¿No es más práctico leer los datos en formato XML?

unijimpe
Publicado: 24/11/2008 4:22 pm

Leer los datos en XML es lo mas usado, pero no mas practico, primero que si la data esta en JSON es menos información la que se transfiere, pues se envían todos los datos como nombre de nodos y de atributos. El segundo punto es que al llegar en JSON se decodifica y la información ya esta como un objeto con lo cual es mas sencillo acceder a todos sus elementos sin necesidad de estar parseando como con XML. Puedes leer acerca de como utilizar JSON con actionscript en JSON con Flash.

djfenix chile
Publicado: 26/11/2008 8:19 pm

wow!, me has iluminado, vi la luz, he abierto los ojos (es broma!) realmente es interesante, hoy pondre en practica algunas aplicaciones a ver como resulta esto

Andros
Publicado: 27/11/2008 6:59 am

Gracias por la aclaración.
Una pregunta más.
El apaño que se hace habitualmente con XML para enviar datos en con etiquetas HTML y saltos de linea de hacer «»

¿Con JSON no sería necesario, estarían los datos dentro de un Object?

Andros
Publicado: 27/11/2008 11:16 am

Vaya solo han salida comillas.
Había ecrito

Andros
Publicado: 27/11/2008 11:17 am

Bueno, no sale… :(
Me refería al CDATA

Claudio
Publicado: 18/06/2009 12:33 pm

el CDATA, si lo ponias entre angulos, es probable que te lo haya limpiado el mecanismo de comentarios, eso se suele hacer para eliminar potenciales instrucciones que provocarian problemas de seguridad. en un sitio una vez alguien o algo me ponia links de spam en los comentarios, asi que empece a filtrar todo lo que estuviera entre angulos o signos mayor y menor.

Pablo
Publicado: 24/07/2009 3:31 pm

Aquí un pequeño ejemplo que hice usando json con prototype…
Haber si sirve de idea para otras cosas.

Saludos.
_________________________________

«-«,’text’=>»Escoge»),
array(
‘group’=>»Comunas»,
‘options’=>array(
array(‘value’=>1,’text’=>»Maipú»),
array(‘value’=>2,’text’=>»Santiago»),
array(‘value’=>3,’text’=>»Providencia»),
array(‘value’=>4,’text’=>»La Forida»)
)
)
);
?>

<!–
var obj=encode($comunas_rm)); ?>;
var s=»;
$A(obj).each(function(item){
if(!Object.isUndefined(item.value) && !Object.isUndefined(item.text)){
s+=»+item.text+»;
}else if(!Object.isUndefined(item.group) && !Object.isUndefined(item.options)){
s+=»;
$A(item.options).each(function(item2){
if(!Object.isUndefined(item2.value) && !Object.isUndefined(item2.text)){
s+=»+item2.text+»;
}
});
s+=»;
}
});
s+=»;
document.write(s);
//End–>

Pablo
Publicado: 24/07/2009 3:32 pm

Mejor lo coloco por part porque se borra,…

Esto dentro de un hambiente php

require_once(«util/json.php»);
$json = new Services_JSON;
$comunas_rm=array(
array(‘value’=>»-«,’text’=>»Escoge»),
array(
‘group’=>»Comunas»,
‘options’=>array(
array(‘value’=>1,’text’=>»Maipú»),
array(‘value’=>2,’text’=>»Santiago»),
array(‘value’=>3,’text’=>»Providencia»),
array(‘value’=>4,’text’=>»La Forida»)
)
)
);

Pablo2
Publicado: 24/07/2009 3:38 pm

incluir prototype.js
y en el body dentro de un tag javascript poner
___________

var obj=encode($comunas_rm)); ?>;
var s=»;
$A(obj).each(function(item){
if(!Object.isUndefined(item.value) && !Object.isUndefined(item.text)){
s+=»+item.text+»;
}else if(!Object.isUndefined(item.group) && !Object.isUndefined(item.options)){
s+=»;
$A(item.options).each(function(item2){
if(!Object.isUndefined(item2.value) && !Object.isUndefined(item2.text)){
s+=»+item2.text+»;
}
});
s+=»;
}
});
s+=»;
document.write(s);

Luis
Publicado: 24/03/2010 4:02 pm

Muchisimas gracais!! me sirvió mucho!!

Gustavo
Publicado: 06/08/2010 11:00 pm

Muy bueno como siempre lo voy a probar!

R.Eder Weiss J.
Publicado: 06/11/2010 1:37 pm

Muy interesante que a partir de la versión 5.2.0 de PHP se añadieron las funciones json_encode y json_decode, y si las combinamos con la funcion $.getJSON del JQuery las posibilidades sobre la Web son infinitas, muy buena la informacion, Excelente, aplicare estos ejemplos practicos en un nuevo proyecto PHP!!

Giacomo
Publicado: 02/09/2011 9:38 am

Hola sr unijimpe, fue aquí donde aprendí a usar json y trabajarlo con flash, pero ya hace un tiempo tengo un problema, quizá usted tenga la respuesta.
He generado un json con php ademas le agregué una session al archivo que lo genera, el print sale perfecto, pero el problema es que al recibirlo en flash no lo acepta y tira error como si el json estuviese mal parseado, le quito la session y anda bien. Crees usted que exista una forma de realizar lo que intento? Saludos y gracias.

Oscar
Publicado: 24/09/2012 3:20 am

Buenos dias, buscando y buscando, di con este blog, el cual me ha gustado. Pero tengo una duda… Al probar mi services y usar echo json_encode, me descarga un archivo XML, ¿esto es normal?

Lalo elia
Publicado: 30/01/2014 5:49 pm

Excelente!!! el único problema es que me sale null cuando hay acentos o caracteres especiales. probé con $data[] = array_map(utf8_encode,$row); pero no pasa nada. Les encargo si alguien lo pudo solucionar…. Gracias…

Leo
Publicado: 08/02/2014 1:11 am

Hola a todos esto se puede utilizar para la carga de juegos flash en un servidor al parecer. De que manera lo puedo utilizar para subir juegos flash a mi sitio de manera automatica?

Espero su ayuda.

Excelente sitio.

wilson sierra
Publicado: 27/03/2014 5:15 pm

buenas tardes,

excelente blog,.. mi comentario es para solicitar la ayuda en el tema de: en una lista despegable(select-option) html, con bases de datos, me sale [object Object] y espacios en blanco, utilizo un array y la instruccion es
echo json_encode($projectos, JSON_FORCE_OBJECT);

cual es la solucion a esto?..

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)