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.