Procesamiento de JSON en PHP: guía completa
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar de facto para la comunicación entre servidor y cliente. En PHP, el trabajo con JSON está implementado de forma nativa a través de la extensión json, disponible desde PHP 5.2.0. En este artículo, analizaremos en detalle las funciones principales, el manejo de errores, el trabajo con estructuras anidadas y las mejores prácticas.
Funciones principales para trabajar con JSON
PHP proporciona dos funciones clave:
json_encode()— convierte un valor de PHP (array, objeto, cadena, etc.) en una cadena JSON.json_decode()— convierte una cadena JSON de vuelta a una variable de PHP (array u objeto).
Ejemplo: codificar un array a JSON
<?php$data = [ 'name' => 'Alice', 'age' => 30, 'is_student' => false, 'skills' => ['PHP', 'JavaScript', 'Python']];
$json = json_encode($data, JSON_PRETTY_PRINT);echo $json;?>Resultado de la ejecución:
{ "name": "Alice", "age": 30, "is_student": false, "skills": [ "PHP", "JavaScript", "Python" ]}Ejemplo: decodificar JSON a un array
<?php$jsonString = '{"name":"Bob","age":25,"is_active":true}';
// El segundo parámetro true — devuelve un array asociativo$array = json_decode($jsonString, true);print_r($array);?>Resultado:
Array( [name] => Bob [age] => 25 [is_active] => 1)Banderas para ajuste fino
Las funciones json_encode() y json_decode() admiten 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 legibilidad).
- JSON_UNESCAPED_UNICODE — no escapa caracteres Unicode (útil para cirílico).
- JSON_FORCE_OBJECT — fuerza la conversión de un array asociativo a un objeto.
- JSON_NUMERIC_CHECK — convierte cadenas que contienen números al tipo numérico.
Ejemplo con cirílico y formato
<?php$data = [ 'name' => 'Алексей', 'city' => 'Москва'];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);?>Resultado:
{ "name": "Алексей", "city": "Москва"}Manejo de errores al trabajar con JSON
Si la cadena de entrada no es un JSON válido, json_decode() devolverá null. Para conocer la causa exacta del error, use las funciones json_last_error() y json_last_error_msg().
<?php$invalidJson = '{name: "Alice"}'; // JSON no válido (claves sin comillas)
$result = json_decode($invalidJson);if (json_last_error() !== JSON_ERROR_NONE) { echo 'Error: ' . json_last_error_msg();} else { print_r($result);}?>Salida:
Error: Syntax errorLista completa de constantes de error:
JSON_ERROR_NONE— no hay errores.JSON_ERROR_DEPTH— se ha superado la profundidad máxima de la pila.JSON_ERROR_STATE_MISMATCH— JSON incorrecto (desajuste de corchetes).JSON_ERROR_SYNTAX— error de sintaxis.JSON_ERROR_UTF8— codificación UTF-8 incorrecta.
Trabajo con estructuras anidadas
JSON a menudo contiene objetos y arrays anidados. PHP permite procesar fácilmente estos datos mediante recursividad o bucles.
<?php$complexJson = '{ "users": [ {"name": "Alice"