====== 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.