PHP es un lenguaje del lado del servidor en donde se puede crear una API que se comunique a través de JSON, tanto para leer peticiones como para responder. Hoy veremos cómo codificar y decodificar JSON en PHP con funciones nativas.
Por defecto, PHP tiene algunos errores al codificar en JSON, ya que a veces algunos números no son codificados como números, sino como cadenas; por eso veremos cómo evitar eso y personalizar la salida gracias a las constantes JSON de PHP.
También veremos cómo manejar los errores; limitar la profundidad de los objetos y otras cosas muy importantes al trabajar con JSON en el lenguaje PHP.
Con PHP y JSON podemos codificar cualquier tipo de variable; no importa si es un booleano, entero, cadena o flotante; todo se codifica correctamente. Lo mismo es para los arreglos u objetos; u objetos con arreglos en su interior.
Si deseas probar los ejemplos, primero instala XAMPP. Después puedes ejecutar los archivos desde la terminal, o probarlos en línea.
¿Quieres codificar y decodificar JSON en JavaScript? mira este post.
Para convertir una variable de PHP a su representación en JSON se usa la función json_encode
. Esta función regresa una cadena (o false en caso de error), y recibe 3 argumentos; los últimos dos opcionales.
El primer argumento es la variable que va a codificar. El segundo argumento es una mascara de bits con algunas constantes predefinidas que veremos más abajo. El tercer argumento es la profundidad; si tenemos un objeto con más objetos en su interior, podemos especificar que no se codifique todo, sino hasta un cierto nivel de profundidad.
Aquí hay algunos ejemplos de cómo se codifica JSON en PHP. Más abajo veremos al segundo y tercer argumento en acción.
Ahora sí veamos más ejemplos.
Múltiples constantes se pueden usar en combinación, usando el operador |
. La lista completa de las constantes que podemos usar está aquí.
Lo que mostraré será cómo forzar que la salida sea numérica y no como cadena.
Para ello se utiliza la constante JSON_NUMERIC_CHECK
al llamara a json_encode
. Aquí un ejemplo:
Hay otras constantes útiles, por ejemplo, JSON_PRETTY_PRINT
agrega espacios para que el JSON se muestre con las tabulaciones y espacios que lo hacen legible; útil si estamos imprimiendo directamente el JSON generado.
Otra constante útil es JSON_PRESERVE_ZERO_FRACTION
, que mantiene el .0 en un número flotante y obliga a que se especifique que dicho número es flotante; por ejemplo, si tenemos el número 15.0 y lo codificamos, se convierte en 15; pero si se pone la constante, ahora sí se imprime bien. Veamos el ejemplo:
De ahí las demás constantes pueden servirnos dependiendo de nuestras necesidades. Por cierto, podemos combinarlas usando |
. Si quiero que se imprima de forma legible (JSON_PRETTY_PRINT
) y que mantenga el cero en los flotantes (JSON_PRESERVE_ZERO_FRACTION
), hago esto:
Así podemos combinar todas las constantes predefinidas; eso fue un ejemplo pero podemos combinar cualquiera.
Si especificamos la profundidad máxima, al codificar un objeto JSON en PHP se regresará false si se excede la misma. Aquí un ejemplo:
Estos límites sirven para cuando no sabemos qué tan profundo es un objeto y queremos protegernos de alguna manera. Entre más niveles de profundidad, más tiempo se tarda en codificar; por eso es que existe esta opción.
Si queremos manejar el error, podemos usar una función que está más abajo.
Si de alguna manera json_encode
devuelve false
, debemos ver qué salió mal. Para ello, PHP proporciona igualmente algunas constantes de error. Me he dado a la tarea de crear una función que nos permite saber qué cosa está mal.
Recuerda que los errores no deben imprimirse, en cambio deberían guardarse en un log.
Y así es como terminamos la parte de codificar JSON en PHP.
Para convertir una cadena JSON a su representación como variable dentro del lenguaje, usamos json_decode
. Esta función también tiene sus argumentos:
$objeto->clave
. En caso de que sea un arreglo asociativo, se accede con $objeto["clave"]
JSON_BIGINT_AS_STRING
que convierte valores numéricos grandes a flotantes.Devuelve el valor NULL en caso de error, o el valor codificado en caso de éxito.
Aquí tenemos un ejemplo:
Es fácil decodificar, llamamos a la función y devuelve el JSON decodificado. En ese caso fue un objeto pero se puede decodificar cualquier variable, por ejemplo un arreglo, una cadena, un booleano, etcétera.
Ahora veamos el segundo argumento. Si lo ponemos en true, devuelve un arreglo asociativo.
La diferencia es que los objetos se convierten a arreglos.
El tercer argumento es la profundidad, la cual es 512 por defecto. Podemos cambiarla ya sea para que sea mayor o para que sea menor. En caso de que el objeto exceda la profundidad, se devuelve NULL
.
Se reutiliza la función para comprobar errores. El error es que se excedió la profundidad. Estos límites igualmente funcionan cuando recibimos un objeto y queremos limitar su profundidad por seguridad o porque queremos poner el límite.
Un uso sería al crear una API en donde los usuarios manden un JSON para hacer determinada cosa. Podríamos limitar la profundidad para evitar que intenten agotar los recursos del servidor.
Me he basado en lo que hay en el sitio oficial de PHP aquí y aquí.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.
Ver comentarios
Hola queria saber si hay alguna forma de retorna imagens del banco de dato utilizando json_encode.
Quiero hacer un sistema de scroll inifinito en mi pagina pero necesito retorna imagens
Hola, podrías mostrar la lista de imágenes y luego agregarlas al HTML ya sea con JavaScript puro o con un framework.
Saludos :)