Sigueme por RSS! RSS

Trabajando con JSON en PHP


JSON (JavaScript Object Notation) es un formato de intercambio de datos basado en objetos, es usado como alternativa al XML en AJAX, gracias a su simplicidad y, puede trabajar con varios lenguajes de programación y tecnologías, entre otros, ActionScript, C/C++, C#, Delphi, Java, JavaScript, Perl, PHP, Python, Ruby, etc.

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.
//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"} 
*/

0 comentarios: Suscribete a los comentarios por RSS

Publicar un comentario

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