Introducción a JSON y PHP
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 servidores web y clientes. En el desarrollo web moderno con PHP, te encontrarás con JSON en todas partes: desde solicitudes API hasta archivos de configuración y almacenamiento de datos estructurados.
En este artículo, analizaremos dos procesos fundamentales para trabajar con JSON en PHP:
- Serialización — conversión de un array u objeto de PHP a una cadena JSON (función
json_encode()). - Análisis (deserialización) — conversión inversa de una cadena JSON a una variable de PHP (función
json_decode()).
El material está orientado a desarrolladores principiantes de PHP, por lo que iremos de lo simple a lo complejo, con ejemplos de código detallados.
Serialización de datos: función json_encode()
La serialización es el proceso de convertir datos desde la representación interna de PHP (arrays, objetos) a una cadena en formato JSON. Esto es necesario cuando deseas enviar datos al cliente (navegador, aplicación móvil) o guardarlos en un archivo/base de datos en un formato universal.
Conversión de un array a JSON
El caso más simple es la serialización de un array asociativo:
<?php$user = [ "name" => "Iván Petrov", "age" => 28, "email" => "ivan@example.com", "is_active" => true];
$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>Resultado de la ejecución:
{ "name": "Iván Petrov", "age": 28, "email": "ivan@example.com", "is_active": true}Observa las banderas:
JSON_UNESCAPED_UNICODE— permite conservar caracteres cirílicos (sin esta bandera, los caracteres rusos se convertirían en \\uXXXX).JSON_PRETTY_PRINT— formatea la salida con sangrías para facilitar la lectura (útil para depuración, pero aumenta el tamaño de la cadena).
Conversión de un objeto a JSON
Los objetos de PHP también se pueden serializar. En este caso, solo se incluirán las propiedades públicas:
<?phpclass Product { public $id; public $title; private $secretPrice; // no se incluirá en JSON
public function __construct($id, $title, $price) { $this->id = $id; $this->title = $title; $this->secretPrice = $price; }}
$product = new Product(1, "Portátil", 75000);echo json_encode($product, JSON_UNESCAPED_UNICODE);// Salida: {"id":1,"title":"Portátil"}?>Trabajo con estructuras anidadas
JSON admite anidamiento. Los arrays de PHP de cualquier profundidad se convierten correctamente:
<?php$data = [ "company" => "TechCorp", "employees" => [ ["name" => "Ana", "position" => "Desarrolladora"], ["name" => "Boris", "position" => "Diseñador"] ], "address" => [ "city" => "Moscú", "street" => "Tverskaya" ]];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);?>Análisis de JSON: función json_decode()
El análisis (deserialización) es el proceso inverso: a partir de una cadena JSON obtenemos datos con los que PHP puede trabajar.
Obtener un objeto
Por defecto, json_decode() devuelve un objeto de la clase stdClass:
<?php$jsonString = '{"name":"Iván Petrov","age":28,"email":"ivan@example.com"}';$user = json_decode($jsonString);
echo $user->name; // Iván Petrovecho $user->age; // 28echo $user->email; // ivan@example.com?>Obtener un array
Si se pasa el segundo argumento true, la función devuelve un array asociativo:
&l