Como utilizar correctamente JSON en PHP

Hoy en día, la mayoría de servicios web o frameworks (tanto javascript como PHP) se comunican enviando y recibiendo objetos en JSON, el problema es que muchos programadores no están acostumbrados a hacerlo y chocan a la hora de comenzar a utilizar esta metodología. Muchísimas veces me he encontrado con conversiones a JSON a mano o parseandolo directamente con split(). Aquí comento como leer y generar JSON en PHP de la forma correcta y esperada.

Antes de empezar nos tiene que quedar claro que PHP viene con 2 funciones incorporadas (desde PHP 5.2) para tratar elementos JSON y que no debemos intentar hacerlo nosotros, ya que no es un problema tan trivial y podemos caer en excepciones que hagan que nuestra conversión no sea correcta.

Un punto remarcable al utilizar estas funciones es que debemos utilizar codificación UTF-8 (otro motivo más para utilizar UTF-8).

JSON encode (Objeto)

Esta función como el nombre indica sirve para convertir un objeto a su representación JSON dentro de un String. La documentación oficial está aquí.

Para PHP un Array asociativo es lo mismo que un Objeto, por lo que si tenemos que generar un JSON a partir de un Array asociativo obtendremos un Objeto:

<?php
$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr); //producirá: {"a":1,"b":2,"c":3,"d":4,"e":5}

Por otro lado, también se pueden utilizar sobre Objetos y se tiene en cuenta la visibilidad de las variables (http://php.net/manual/es/language.oop5.visibility.php) al generar el String.

<?php
    class Persona{
        private $id;
        public $edad;
        public $nombre;
        public function Persona($id,$edad,$nombre){
            $this->id = $id;
            $this->edad = $edad;
            $this->nombre = $nombre;
        }
    }
    
    $cliente = new Persona(2344,45,"Ernesto");
    
    echo json_encode($cliente); //resultado {"edad":45,"nombre":"Ernesto"}

JSON decode (String)

Esta función sirve para parsear un String JSON y convertirlo en un objeto. Es la función contraria a la anterior, dado un String se retorna el Objeto correspondiente. La documentación oficial está aquí.

En el primer ejemplo vemos como convertir un String que es un objeto y hacemos un var_dump() para ver como queda. También podemos ver que esta función tiene un parámetro opcional para que en lugar de retornar un Objeto, retorno un Array asociativo.

<?php
$resultado = json_decode('{"edad":45,"nombre":"Ernesto"}');
var_dump( $resultado );
/*
Este es el resultado
object(stdClass)#1 (2) {
  ["edad"]=>
  int(45)
  ["nombre"]=>
  string(7) "Ernesto"
}
*/
$resultado_asociativo = json_decode('{"edad":45,"nombre":"Ernesto"}', true);
var_dump( $resultado_asociativo );
/*
Este es el resultado
array(2) {
  ["edad"]=>
  int(45)
  ["nombre"]=>
  string(7) "Ernesto"
}
*/

Espero sea de ayuda y ahorre tiempo.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on StumbleUpon
Pablo Oneto

Soy un desarrollador de software web especializado en PHP.

0 Comments

  1. Pingback: Como utilizar correctamente JSON en PHP

Deja un comentario