JSON en PHP
JSON (JavaScript Object Notation) es el formato estandar para intercambiar datos entre aplicaciones. PHP facilita trabajar con JSON mediante dos funciones principales.
¿Que es JSON?
JSON es un formato de texto ligero para representar datos estructurados. Es muy usado en APIs web y archivos de configuracion:
{
"nombre": "Ana",
"edad": 28,
"activo": true,
"hobbies": ["leer", "programar", "viajar"]
}
Convertir PHP a JSON
json_encode() convierte arrays y objetos PHP a
formato JSON:
<?php
declare(strict_types=1);
$usuario = [
'nombre' => 'Ana',
'edad' => 28,
'activo' => true,
];
$json = json_encode($usuario);
echo $json;
// {"nombre":"Ana","edad":28,"activo":true}
// Con formato legible (pretty print)
$jsonBonito = json_encode($usuario, JSON_PRETTY_PRINT);
echo $jsonBonito;
/*
{
"nombre": "Ana",
"edad": 28,
"activo": true
}
*/
Convertir JSON a PHP
json_decode() convierte JSON a variables PHP:
<?php
declare(strict_types=1);
$json = '{"nombre":"Ana","edad":28,"activo":true}';
// Como objeto (por defecto)
$objeto = json_decode($json);
echo $objeto->nombre; // Ana
echo $objeto->edad; // 28
// Como array asociativo (recomendado)
$array = json_decode($json, associative: true);
echo $array['nombre']; // Ana
echo $array['edad']; // 28
Opciones utiles de json_encode
<?php
declare(strict_types=1);
$datos = [
'mensaje' => 'Hola "mundo"',
'url' => 'https://ejemplo.com/pagina',
'precio' => 19.99,
];
// Varias opciones combinadas
$json = json_encode($datos,
JSON_PRETTY_PRINT | // Formato legible
JSON_UNESCAPED_UNICODE | // Mantener acentos
JSON_UNESCAPED_SLASHES // No escapar /
);
echo $json;
/*
{
"mensaje": "Hola \"mundo\"",
"url": "https://ejemplo.com/pagina",
"precio": 19.99
}
*/
Manejo de errores
Es importante verificar que la conversion fue exitosa:
<?php
declare(strict_types=1);
$jsonInvalido = '{"nombre": "Ana", edad: 28}'; // Falta comillas
$datos = json_decode($jsonInvalido, associative: true);
if ($datos === null && json_last_error() !== JSON_ERROR_NONE) {
echo 'Error: ' . json_last_error_msg();
// Error: Syntax error
}
// Alternativa: lanzar excepcion automaticamente
$datos = json_decode(
$jsonInvalido,
associative: true,
flags: JSON_THROW_ON_ERROR
);
// Lanza JsonException si hay error
Leer y guardar JSON en archivos
<?php
declare(strict_types=1);
// Guardar datos como JSON
$config = [
'debug' => true,
'version' => '1.0.0',
'database' => [
'host' => 'localhost',
'port' => 3306,
],
];
$json = json_encode($config, JSON_PRETTY_PRINT);
file_put_contents('config.json', $json);
// Leer JSON desde archivo
$contenido = file_get_contents('config.json');
$config = json_decode($contenido, associative: true);
echo $config['version']; // 1.0.0
echo $config['database']['host']; // localhost
Trabajar con listas
<?php
declare(strict_types=1);
$json = '[
{"id": 1, "nombre": "Ana"},
{"id": 2, "nombre": "Luis"},
{"id": 3, "nombre": "Eva"}
]';
$usuarios = json_decode($json, associative: true);
foreach ($usuarios as $usuario) {
echo $usuario['nombre'] . PHP_EOL;
}
// Ana
// Luis
// Eva
// Buscar un usuario
$encontrado = null;
foreach ($usuarios as $usuario) {
if ($usuario['id'] === 2) {
$encontrado = $usuario;
break;
}
}
echo $encontrado['nombre']; // Luis
Responder con JSON (APIs)
Cuando creas una API, debes enviar la cabecera correcta:
<?php
declare(strict_types=1);
// Indicar que la respuesta es JSON
header('Content-Type: application/json');
$respuesta = [
'success' => true,
'data' => [
'id' => 1,
'nombre' => 'Producto ejemplo',
'precio' => 29.99,
],
];
echo json_encode($respuesta);
// El navegador/cliente recibe JSON valido
Ejercicios
Ejercicio 1: Convertir a JSON
Crea un array con tu nombre, edad y ciudad. Conviertelo a JSON con formato legible y muestralo por pantalla.
Ver solucion
<?php
declare(strict_types=1);
$persona = [
'nombre' => 'Juan',
'edad' => 25,
'ciudad' => 'Madrid',
];
$json = json_encode($persona, JSON_PRETTY_PRINT);
echo $json;
Ejercicio 2: Leer JSON
Dado el JSON '{"producto":"Laptop","precio":999}',
decodificalo y muestra el producto y su precio.
Ver solucion
<?php
declare(strict_types=1);
$json = '{"producto":"Laptop","precio":999}';
$datos = json_decode($json, associative: true);
echo "Producto: " . $datos['producto'] . PHP_EOL;
echo "Precio: " . $datos['precio'];
Ejercicio 3: Guardar configuracion
Crea un array con configuracion (modo debug, idioma, timezone)
y guardalo en un archivo settings.json.
Ver solucion
<?php
declare(strict_types=1);
$config = [
'debug' => false,
'idioma' => 'es',
'timezone' => 'Europe/Madrid',
];
$json = json_encode($config, JSON_PRETTY_PRINT);
file_put_contents('settings.json', $json);
¿Has encontrado un error o tienes una sugerencia para mejorar esta leccion?
Escribenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales y soporte personalizado.
Descubrir cursos premium