Para usar JSON requieres en algunos lenguajes de una librerÃa externa, en PHP no es necesario, se agrego desde la versión 5.2 y está activa por defecto, por lo que no es necesario ir al PHP.ini.
El formato: las strings deben estar entre comillas dobles ("), el objeto es un conjunto de datos pares (nombre - valor), encerrados entre llaves {}. Entre nombre y valor colocamos dos puntos (:) y entre cada par de datos una coma (,) para separarlos.
Objeto => { nombre : valor}
ejemplo:
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}Para decodificar una cadena de caracteres con formato JSON, usamos en PHP la función json_decode.
Le pasamos a la función json_decode dos parámetros, la string a decodificar y true para indicar que queremos que nos devuelva un array asociativo.
Si preferimos trabajar directamente con objetos, no le pasamos el segundo parámetro:
Para controla los posibles errores podemos usar la función json_last_error, que devuelve si existe, el último error ocurrido durante el uso de las funciones JSON.
Puede trabajar con varias constantes, veamos un ejemplo:
Convirtiendo datos a formato JSON
Por ultimo, tenemos la función json_encode, que retorna una string en formato JSON, a partir de otro que le pasemos como parámetro, ejemplo:
ahora, pasemos a JSON el resultado de una consulta a la base de datos.
//armamos nuestra cadena en formato JSON
$sCadena = '{"A":1,"B":2,"C":3,"D":4,"E":5,"F":6,"G":7,"H":8,"I":9}';
// decodificamos la cadena
$arrDatos = json_decode($sCadena,true);
// imprimimos el contenido del array
print_r($arrDatos);
// imprimimos un determinado elemento
echo '<br/>Elemento "F" valor ',$arrDatos['F'];
/* devuelve:
Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 [F] => 6 [G] => 7 [H] => 8 [I] => 9 )
Elemento "F" valor 6
*/
Le pasamos a la función json_decode dos parámetros, la string a decodificar y true para indicar que queremos que nos devuelva un array asociativo.
Si preferimos trabajar directamente con objetos, no le pasamos el segundo parámetro:
// decodificamos la cadena
$ObjDatos = json_decode($sCadena);
// imprimimos un determinado dato
echo 'Elemento F valor ',$ObjDatos -> {'F'}; // devuelve: Elemento "F" valor 6
Para controla los posibles errores podemos usar la función json_last_error, que devuelve si existe, el último error ocurrido durante el uso de las funciones JSON.
Puede trabajar con varias constantes, veamos un ejemplo:
// produce error porque las strings en JSON deben estar entre comillas doble
//$sCadena = "{'A':1,'B':2,'C':3}";
// produce error por sintaxis incorrecta (se usa (:) y no (,) dentro de los pares)
$sCadena = '{"A",1,"B":2,"C":3}';
// decodificamos la cadena
$arrDatos = json_decode($sCadena,true);
// personalizando posibles errores ..
if (json_last_error()) {
echo '<b>Error: </b>';
switch(json_last_error()){
case JSON_ERROR_DEPTH:
echo 'Excedido tamaño máximo de la pila';break;
// codificacion incorrecta
case JSON_ERROR_CTRL_CHAR:
echo 'Encontrado carácter de control no esperado';break;
// en caso de error de sintaxis, devuelve 4
case JSON_ERROR_SYNTAX:
echo 'Sintaxis incorrecta, JSON mal formado';break;
}
}else
// imprimimos un determinado elemento (si no hay error)
echo 'Elemento B valor ',$arrDatos['B']; // Elemento "B" valor 2
Convirtiendo datos a formato JSON
Por ultimo, tenemos la función json_encode, que retorna una string en formato JSON, a partir de otro que le pasemos como parámetro, ejemplo:
// arrmamos un array con los datos a codificar
$arrDatos = array ('A' => 1, 'b' => 2, 'C' => 3, 'D' => 4, 'E' => 5);
// codificamos el contenido del array
echo json_encode($arrDatos);
// devuelve: {"A":1,"b":2,"C":3,"D":4,"E":5}
ahora, pasemos a JSON el resultado de una consulta a la base de datos.
(clic para mostrar/ocultar el código)
// indicamos que la respuesta tendra el formato JSON
header('Content-type: application/json');
/*
mysql> select * from personas;
+------------+--------+----------+------+
| id_persona | nombre | apellido | sexo |
+------------+--------+----------+------+
| 1 | Luis | Medina | m |
| 2 | Maria | Arrieta | f |
| 3 | Sofia | Lopez | f |
| 4 | Ana | Mesa | f |
| 5 | Liv | Tyler | f |
| 6 | Jose | Gomez | m |
+------------+--------+----------+------+
*/
// nos conectamos a MySQL
$conex = mysql_connect('localhost', 'root', '1234');
// seleccionamos la base de datos
mysql_select_db('mi_db', $conex)
or die('Error: no se pudo seleccionar la base de datos');
// hacemos una consulta
$resultado = mysql_query('SELECT * FROM personas WHERE id_persona=3', $conex)
or die(mysql_error());
// arrmamos el array
while ($row = mysql_fetch_assoc($resultado)) {
$arrDatos = array(
'nombre' => $row['nombre'],
'apellido' => $row['apellido'],
'sexo' => $row['sexo']
);
}
// pasamos el contenido del array a JSON
echo json_encode($arrDatos);
/*
devuelve: {"nombre":"Sofia","apelido":"Lopez","sexo":"f"}
*/

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.