Trabajo con JSON en PHP: análisis y serialización en la práctica
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para las API web y los archivos de configuración. En PHP, el trabajo con JSON está implementado de forma nativa y no requiere la instalación de extensiones adicionales. En este artículo, analizaremos cómo realizar el análisis y la serialización de JSON en PHP con ejemplos reales, y también aprenderemos a manejar errores y trabajar con estructuras anidadas.
¿Qué son la serialización y el análisis de JSON?
Antes de pasar al código, definamos los conceptos clave:
- Serialización — conversión de una variable PHP (array, objeto) a una cadena JSON.
- Análisis (deserialización) — proceso inverso: conversión de una cadena JSON a una variable PHP.
PHP proporciona dos funciones principales para estas tareas: json_encode() y json_decode(). Veámoslas en detalle.
Serialización de datos a JSON con json_encode()
La función json_encode() toma un valor PHP (excepto recursos) y devuelve su representación JSON. Veamos un ejemplo básico:
<?php$user = [ 'name' => 'Iván Petrov', 'age' => 28, 'email' => 'ivan@example.com', 'is_active' => true];
$json = json_encode($user);echo $json;// Salida: {"name":"Iván Petrov","age":28,"email":"ivan@example.com","is_active":true}?>Por defecto, json_encode() convierte los arrays asociativos en objetos JSON. Si necesita un array, use la bandera JSON_FORCE_OBJECT:
<?php$numbers = [10, 20, 30];echo json_encode($numbers); // [10,20,30]echo json_encode($numbers, JSON_FORCE_OBJECT); // {"0":10,"1":20,"2":30}?>Banderas útiles de json_encode()
JSON_PRETTY_PRINT— formatea la salida con sangrías para facilitar la lectura.JSON_UNESCAPED_UNICODE— no escapa los caracteres Unicode (letras rusas).JSON_NUMERIC_CHECK— convierte cadenas que contienen números al tipo numérico.
<?php$data = ['product' => 'Libro', 'price' => '1500'];
// Salida bonita con caracteres rusosecho json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);/*{ "product": "Libro", "price": "1500"}*/
// Conversión automática de la cadena '1500' a númeroecho json_encode($data, JSON_NUMERIC_CHECK);// {"product":"Libro","price":1500}?>Análisis de JSON en PHP con json_decode()
La función json_decode() toma una cadena JSON y la convierte en una variable PHP. El segundo parámetro $associative determina si se devuelve un array asociativo (true) o un objeto (false, por defecto).
<?php$jsonString = '{"name":"María","age":25,"hobbies":["lectura","viajes"]}';
// Análisis a objeto$obj = json_decode($jsonString);echo $obj->name; // Maríaecho $obj->hobbies[0]; // lectura
// Análisis a array asociativo$arr = json_decode($jsonString, true);echo $arr['age']; // 25?>Trabajo con estructuras anidadas
JSON a menudo contiene objetos y arrays anidados. Veamos un ejemplo con una API del clima:
<?php$weatherJson = '{ "city": "Moscú", "temperature": { "current": -5, "feels_like": -8 }, "forecast": [ {"day": "Lun", "temp": -3}, {"day": "Mar", "temp": -1} ]}';
$weather = json_decode($weatherJson, true);
echo "Temperatura actual: " . $weather['temperature']['current'] . "°C";echo "Sensación térmica: " . $weather['temperature']['feels_like'] . "°C";
foreach ($weather['forecast'] as $day) { echo "{$day['day']}: {$day['temp']}°C";}?>