Cuándo llega mi autobús
Una aplicación del móvil enseña cuándo llega tu autobús. No la ha escrito el ayuntamiento entero: pide los datos a un servidor.
Ese servidor no contesta con una página bonita. Contesta con datos, en un formato que cualquier programa entiende.
Hoy haces que tu PHP conteste así.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| API | Una puerta de un servidor por la que otros programas piden datos. | buses.php?line=L1 |
| JSON | Un formato de texto para datos. Lo entienden casi todos los lenguajes. | {"line":"L1","minutes":4} |
| json_encode | Convierte un array de PHP en texto JSON. | json_encode($bus) |
| json_decode | Convierte un texto JSON en un array de PHP. | json_decode($text, true) |
| Código de estado | Un número que dice cómo fue la petición: 200 bien, 404 no existe. | 404 |
| Cabecera | Una línea de información que viaja antes del contenido de la respuesta. | Content-Type |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
JSON es texto con una forma fija
Un JSON usa llaves y comillas. Cada dato tiene un nombre y un valor: "line":"L1".
Una lista va entre corchetes. Un objeto, entre llaves.
No tienes que escribirlo a mano. PHP lo hace con json_encode.
Pruébalo: de array a JSON
<?php
// Un array con nombre se convierte en un objeto JSON.
$bus = ["line" => "L1", "minutes" => 4, "express" => false];
echo json_encode($bus) . "\n";
// Cambia los minutos por 9 y pon express en true.
Ejemplo resuelto: de PHP a JSON
| En PHP | En JSON | Cómo se llama en JSON |
|---|---|---|
| ["L1", "L7"] | ["L1","L7"] | Una lista |
| ["line" => "L1"] | {"line":"L1"} | Un objeto |
| 4 | 4 | Un número |
| "Café" | "Caf\u00e9" | Un texto, con la é como código |
| true | true | Verdadero |
| null | null | Nada |
| [] | [] | Una lista vacía |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: una lista y las tildes
<?php
// Una lista de arrays se convierte en una lista de objetos.
$buses = [
["line" => "L1", "minutes" => 4],
["line" => "L7", "minutes" => 12],
];
echo json_encode($buses) . "\n";
// Las tildes salen como códigos, salvo que lo pidas.
echo json_encode("Café") . "\n";
echo json_encode("Café", JSON_UNESCAPED_UNICODE) . "\n";
Y al revés: json_decode
Otras veces eres tú quien recibe un JSON, de otra API. Lo conviertes en un array con json_decode.
Pon true como segundo dato. Si no, PHP te da un objeto en lugar de un array.
Si el texto no es un JSON válido, devuelve null. Compruébalo siempre.
Pruébalo: de JSON a array
<?php
// json_decode con true devuelve un array con nombre.
$text = '{"line":"L1","minutes":4}';
$bus = json_decode($text, true);
echo $bus["line"] . " llega en " . $bus["minutes"] . " minutos\n";
// Añade otro campo al texto y léelo.
Repaso rápido: JSON
Inténtalo
Repaso rápido: JSON
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.