JSON es el idioma común de las APIs
JSON, de «JavaScript Object Notation», es un texto que escribe datos con llaves, corchetes y comillas. Casi todas las APIs web lo usan para enviar y recibir datos.
Saber leerlo y comprobarlo evita el fallo más habitual: un dato que llega con otro tipo, o que no llega.
Al terminar esta lección
Nota
Puedo leer, escribir y comprobar un registro en JSON.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Objeto | un grupo de pares nombre y valor entre llaves | {"copies": 3} |
| Array | una lista de valores entre corchetes | [1, 2, 3] |
| Tipo | la clase de un valor: texto, número, verdadero o falso, o null | |
| Campo | un par nombre y valor dentro de un objeto | |
| Validar | comprobar que los datos cumplen las reglas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un objeto JSON tiene pares nombre y valor
Un objeto va entre llaves. Cada campo es un nombre entre comillas dobles, dos puntos y un valor. Los campos se separan con comas.
Un array va entre corchetes y separa sus valores con comas. Un array puede tener objetos dentro, y así se envía una lista de filas.
Un libro en JSON
{
"id": 1,
"title": "Redes de computadores",
"copies": 3,
"status": "disponible",
"author": null
}Ejemplo resuelto: los tipos de JSON
| Tipo | Cómo se escribe | Ejemplo |
|---|---|---|
| Texto | Entre comillas dobles | "disponible" |
| Número | Sin comillas | 3 |
| Verdadero o falso | true o false, sin comillas | true |
| Nada | null, sin comillas | null |
| Lista | Entre corchetes | [1, 2] |
| Objeto | Entre llaves | {"copies": 3} |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que "3" y 3 son el mismo valor. Con comillas es un texto, y sin comillas es un número. Una API que espera un número rechaza el texto, y una suma con textos no suma. Comprueba el tipo, no solo que el campo exista.
La API recibe y devuelve JSON
En el laboratorio, la API de la biblioteca envía las filas como un array de objetos. Al crear una fila, envías tú un objeto.
Primero prepara la tabla books. Después pide un libro y mira cómo llega.
Dar a psql la contraseña
export PGPASSWORD=shopSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear la tabla de libros
psql -h db -U shop -q -c "drop table if exists books; create table books (id serial primary key, title text not null, copies int not null default 1, status text not null default 'disponible'); insert into books (title, copies, status) values ('Redes de computadores', 3, 'disponible'), ('Algoritmos y estructuras', 0, 'prestado'), ('Sistemas operativos', 2, 'disponible'), ('Ingenieria del software', 1, 'disponible'); notify pgrst, 'reload schema'"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir solo dos campos
curl -s -w "\n" "http://api:3000/books?id=eq.1&select=title,copies"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Validar es comprobar tres cosas
Una API que valida comprueba que el campo existe, que tiene el tipo correcto y que su valor cumple la regla. Por ejemplo, copies debe existir, ser un número entero y no ser negativo.
Si algo falla, responde con un error y no guarda nada. Mira los tres fallos con la tabla de libros.
Un JSON mal escrito
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"title":"Redes seguras",}' "http://api:3000/books"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un número escrito como texto
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"title":"Redes seguras","copies":"muchas"}' "http://api:3000/books"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Falta el campo title
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"copies":1}' "http://api:3000/books"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un libro correcto
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"title":"Redes seguras","copies":1}' "http://api:3000/books"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.