JSON es un formato de texto para representar e intercambiar datos estructurados entre aplicaciones.
JSON (JavaScript Object Notation) es un formato de texto ligero para el intercambio de datos. Aunque viene de JavaScript, PHP lo maneja de forma nativa y extremadamente eficiente. Es fundamental para crear APIs y comunicar tu backend (PHP) con el frontend (React, Vue, JS puro).
json_encode: de PHP a texto (JSON)
Esta función toma un array o un objeto de PHP y lo convierte en una cadena de texto (string) con formato JSON. Es lo que haces cuando quieres “enviar” datos al exterior.
Sintaxis:
string json_encode ( mixed $value [, int $flags ] )
Ejemplo:
$usuario = [
"nombre" => "Carlos",
"edad" => 30,
"activo" => true,
"habilidades" => ["PHP", "SQL", "Git"]
];
// Convertimos el array PHP a JSON
// JSON_UNESCAPED_UNICODE permite que las tildes y ñ se vean bien
// JSON_PRETTY_PRINT hace que el JSON sea legible para humanos (con saltos de línea)
$jsonTexto = json_encode($usuario, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $jsonTexto;Salida generada (String):
{
"nombre": "Carlos",
"edad": 30,
"activo": true,
"habilidades": [
"PHP",
"SQL",
"Git"
]
}json_decode: de texto (JSON) a PHP
Esta función hace lo contrario: recibe un string JSON (quizás recibido de una API externa o leído de un archivo) y lo convierte en una estructura de datos de PHP.
El “Truco” del segundo parámetro: Esta es la fuente de confusión número 1 en PHP.
- Si usas
json_decode($json), PHP crea un Objeto (stdClass). - Si usas
json_decode($json, true), PHP crea un Array Asociativo.
| Modo | Código | Acceso al dato |
|---|---|---|
| Objeto (Por defecto) | $datos = json_decode($json); | $datos->nombre |
| Array (Recomendado) | $datos = json_decode($json, true); | $datos['nombre'] |
Ejemplo:
$jsonRecibido = '{"producto": "Monitor", "precio": 200}';
// Modo Objeto
$obj = json_decode($jsonRecibido);
echo $obj->producto; // Salida: Monitor
// Modo Array (Más común si trabajas con arrays en el resto de tu código)
$arr = json_decode($jsonRecibido, true);
echo $arr['producto']; // Salida: MonitorManejo de errores en JSON
A veces el JSON que recibes está mal formado (falta una coma, una comilla, etc.). Si json_decode falla, devuelve null, lo cual puede ser peligroso si no lo verificas.
Desde PHP 7.3+, la mejor forma de manejar esto es combinándolo con lo que aprendimos al principio del módulo: Excepciones. Usamos la bandera JSON_THROW_ON_ERROR.
$jsonCorrupto = '{"nombre": "Juan" ... error de sintaxis ... }';
try {
// Esto lanzará una excepción automática si el JSON está mal
$datos = json_decode($jsonCorrupto, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo "¡Error procesando JSON!: " . $e->getMessage();
}