Procesamiento 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 cliente y servidor, así como entre diferentes servicios web. En PHP, el trabajo con JSON está implementado de forma nativa y no requiere la instalación de extensiones adicionales, lo que lo convierte en uno de los lenguajes más convenientes para analizar y generar datos JSON. En este artículo, analizaremos en detalle todos los aspectos del procesamiento JSON en PHP: desde funciones básicas hasta técnicas avanzadas y manejo de errores.
Funciones principales de PHP para trabajar con JSON
PHP proporciona dos funciones clave para trabajar con JSON:
json_encode($value, $options = 0, $depth = 512)— convierte un valor de PHP (array, objeto, cadena, número) en una cadena JSON.json_decode($json, $associative = false, $depth = 512, $options = 0)— decodifica una cadena JSON de vuelta a un valor de PHP. Si el parámetro$associativese establece entrue, devuelve un array asociativo; de lo contrario, devuelve un objeto stdClass.
Veamos un ejemplo sencillo:
<?php// Creamos un array asociativo$data = [ "name" => "Iván", "age" => 30, "city" => "Moscú", "skills" => ["PHP", "JavaScript", "Python"]];
// Codificamos a JSON$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $json;// Salida:// {// "name": "Iván",// "age": 30,// "city": "Moscú",// "skills": ["PHP", "JavaScript", "Python"]// }
// Decodificamos de vuelta a un array$decoded = json_decode($json, true);echo $decoded['name']; // Iván?>Opciones importantes de json_encode
La función json_encode admite múltiples banderas que modifican el comportamiento de la codificación. Las más útiles son:
JSON_UNESCAPED_UNICODE— no escapa caracteres Unicode (cirílico, emojis). Sin esta bandera, las letras rusas se convertirán en \\uXXXX.JSON_PRETTY_PRINT— formatea la salida con sangrías y saltos de línea para facilitar la lectura.JSON_NUMERIC_CHECK— convierte cadenas numéricas en números.JSON_FORCE_OBJECT— fuerza la creación de un objeto en lugar de un array, incluso si el array está vacío o es indexado.JSON_PRESERVE_ZERO_FRACTION— conserva la parte fraccionaria para números enteros (por ejemplo, 10.0).
Ejemplo de combinación de opciones:
<?php$data = ['product' => 'Libro', 'price' => '1500.50', 'count' => 5];echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);// {"product":"Libro","price":1500.5,"count":5}?>Manejo de estructuras anidadas y objetos complejos
PHP permite trabajar con estructuras JSON profundamente anidadas. Veamos un ejemplo de análisis de una respuesta compleja de una API:
<?php// Supongamos que esta es una respuesta de una API externa$apiResponse = '{ "status": "success", "data": { "users": [ {"id": 1, "name": "Ana", "roles": ["admin", "editor"]}, {"id": 2, "name": "Pedro", "roles": ["user"]} ], "pagination": { "page": 1, "totalPages": 3 } }}';
$parsed = json_decode($apiResponse, true);
// Obtenemos los nombres de todos los usuarios$names = array_column($parsed['data']['users'], 'name');print_r($names); // Array ( [0] => Ana [1] => Pedro )
// Verificamos si algún usuario tiene el rol adminforeach ($parsed['data']['users'] as $user) { if (in_array('admin', $user['roles'])) { echo "{$user['name']} tiene permisos de administrador"; }}?>Manejo de errores JSON
Uno de los problemas más comunes es un JSON incorrecto. PHP proporciona funciones para diagnosticar errores:
json_last_error()— devuelve
También en la biblioteca
Migraciones de bases de datos en C++: revisión de herramientas y bibliotecas
Axios — Cliente HTTP para JavaScript (Node.js)
Generador de códigos QR en Kotlin: biblioteca ZXing y consejos de implementación