Leccion 59 de 75 10 min de lectura

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:

JSON
{
    "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
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?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);

¿Te está gustando el curso?

Tenemos cursos premium con proyectos reales y soporte personalizado.

Descubrir cursos premium