====== 04 - JSON ======
**JSON** (*JavaScript Object Notation*) es un formato de texto para **intercambiar información estructurada** entre aplicaciones. Es el formato estándar de las **APIs REST**: el cliente envía JSON y recibe JSON.
===== 1. Sintaxis =====
{
"id": 42,
"title": "Código limpio",
"available": true,
"authors": ["Robert C. Martin"],
"price": null,
"publisher": {
"name": "Anaya",
"country": "ES"
}
}
^ Elemento ^ Sintaxis ^
| Objeto | ''{ "clave": valor }'' |
| Array | ''[valor, valor]'' |
| Clave | Siempre cadena entre comillas dobles |
| Tipos de valor | cadena, número, booleano (''true''/''false''), ''null'', objeto, array |
| Separadores | Comas entre pares y entre elementos; sin coma final |
Los valores pueden anidarse: un array de objetos, un objeto dentro de otro.
===== 2. JSON en las APIs =====
Una petición a una API REST envía y recibe JSON:
POST /api/books
Content-Type: application/json
{ "title": "Código limpio", "authorId": 3 }
HTTP/1.1 201 Created
Content-Type: application/json
{ "id": 42, "title": "Código limpio" }
La cabecera ''Content-Type: application/json'' indica el formato del cuerpo.
===== 3. Leer y escribir JSON desde TypeScript =====
// Parsear: texto JSON -> objeto
const response = await fetch("/api/books/42");
const book = await response.json();
console.log(book.title);
// Serializar: objeto -> texto JSON
const payload = JSON.stringify({ title: "Código limpio", authorId: 3 });
await fetch("/api/books", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: payload,
});
* ''JSON.parse(texto)'' convierte texto JSON en un objeto de JavaScript.
* ''JSON.stringify(objeto)'' convierte un objeto en texto JSON.
* ''response.json()'' combina ambas: espera el cuerpo y lo parsea.
===== 4. JSON en Java =====
En el backend, las librerías de **Spring** convierten automáticamente entre JSON y objetos Java cuando un controlador devuelve un objeto o recibe un ''@RequestBody''; no se escribe el parseo a mano.
JSON no admite comentarios ni fechas como tipo nativo (se representan como texto ISO: ''"2026-10-12"''). Y una clave debe ser única dentro de su objeto: repetirla es un error común al construir el JSON a mano.