Trabajo con JSON en PHP: análisis y serialización de datos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué PHP necesita JSON?

JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar de facto para APIs web, archivos de configuración y almacenamiento de información estructurada. A pesar de su origen en JavaScript, JSON es perfectamente compatible con todos los lenguajes de programación modernos, incluyendo PHP.

En PHP, el trabajo con JSON se implementa de forma nativa a través de dos funciones clave: json_encode() (serialización — conversión de datos PHP a cadena JSON) y json_decode() (deserialización — análisis de cadena JSON de vuelta a estructuras PHP). En este artículo, analizaremos en detalle cómo usar estas herramientas de manera efectiva, manejar errores y aplicar JSON en proyectos reales.



1. Serialización de datos: función json_encode()

La función json_encode() convierte un valor PHP (array, objeto, cadena, número) en una cadena en formato JSON. Esto es necesario cuando deseas enviar datos al cliente (por ejemplo, a través de AJAX) o guardarlos en un archivo.



Sintaxis básica y ejemplos

<?php// Array simple$colors = ["red", "green", "blue"];echo json_encode($colors);// Salida: ["red","green","blue"]

// Array asociativo$user = [ "name" => "Iván", "age" => 30, "is_admin" => false];echo json_encode($user);// Salida: {"name":"Iván","age":30,"is_admin":false}?>


Banderas útiles de json_encode()

La función admite un segundo parámetro — una máscara de bits de banderas. Veamos las más útiles:

  • JSON_PRETTY_PRINT — formatea la salida con sangrías para mejorar la legibilidad.
  • JSON_UNESCAPED_UNICODE — no escapa caracteres cirílicos ni otros caracteres Unicode (de lo contrario, las letras rusas se convierten en \\uXXXX).
  • JSON_NUMERIC_CHECK — convierte cadenas que contienen números al tipo numérico.
  • JSON_FORCE_OBJECT — fuerza la conversión de un array a objeto incluso para arrays indexados.


<?php$data = ["name" => "Ana", "age" => "25"];

// Sin banderasecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}

// Con banderasecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "Ana", "age": "25"}*/?>


2. Análisis de JSON: función json_decode()

La función json_decode() realiza la operación inversa — convierte una cadena JSON de vuelta a una variable PHP. Por defecto, devuelve un objeto de la clase stdClass, pero se puede solicitar un array asociativo.



Análisis a objeto y a array

<?php$jsonString = '{"name":"Pedro","age":28,"skills":["PHP","MySQL"]}';

// Por defecto — objeto$obj = json_decode($jsonString);echo $obj->name; // Pedroecho $obj->skills[0]; // PHP

// Con bandera true — array asociativo$arr = json_decode($jsonString, true);echo $arr["name"]; // Pedroecho $arr["skills"][1]; // MySQL?>


Profundidad de recursión

El tercer parámetro depth limita la profundidad de anidamiento. Por defecto son 512 niveles. Esto es una protección contra ataques como "billion laughs attack":

<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // Máximo 2 niveles// Devuelve null, ya que se superó la profundidad?>


3. Manejo de errores al trabajar con JSON

Uno de los problemas más comunes es una cadena JSON incorrecta. PHP no lanza una excepción al producirse un error de análisis, sino que devuelve null. Para entender qué salió mal, usa las funciones json_last_error() y json_last_error_msg().



Verificación de errores

<?php$badJson = '{"name": "Error, sin comilla}';$data = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) { echo "Error JSON: " . json_last_error_msg();}

Blogs

Book Recommendations