Ficheros JSON¶
Introducción¶
JSON (JavaScript Object Notation) es un formato de texto para representar datos estructurados. Es legible por humanos y fácilmente procesable por máquinas.
Ejemplo de fichero alumno.json:
{
"nombre": "Ana García",
"ciclo": "DAW",
"nota": 8.5,
"modulos": ["Programación", "Bases de Datos", "Entornos de Desarrollo"],
"aprobado": true
}
JSON soporta los siguientes tipos de datos:
| Tipo JSON | Equivalente en Python |
|---|---|
string |
str |
number |
int o float |
boolean (true/false) |
bool (True/False) |
null |
None |
array |
list |
object |
dict |
JSON es ideal para:
- Almacenar datos con estructura compleja o anidada
- Comunicar datos entre aplicaciones (APIs REST)
- Ficheros de configuración de aplicaciones
- Fichas de alumnos con información detallada
Usa CSV para datos tabulares simples (como un listado) y JSON cuando los datos tienen estructura jerárquica o campos opcionales.
El módulo json¶
Python incluye el módulo json en la biblioteca estándar:
Las cuatro funciones principales son:
| Función | Dirección | Origen/Destino |
|---|---|---|
json.load() |
JSON → Python | fichero |
json.loads() |
JSON → Python | string |
json.dump() |
Python → JSON | fichero |
json.dumps() |
Python → JSON | string |
Leer JSON desde un fichero: json.load()¶
json.load() convierte automáticamente los tipos JSON a sus equivalentes en Python.
Leer una lista de alumnos desde JSON¶
[
{"nombre": "Ana García", "ciclo": "DAW", "nota": 8.5},
{"nombre": "Carlos López", "ciclo": "DAM", "nota": 6.0},
{"nombre": "María Fernández", "ciclo": "DAW", "nota": 9.2},
{"nombre": "Pedro Martín", "ciclo": "ASIR", "nota": 5.5}
]
Leer JSON desde un string: json.loads()¶
json.loads() (con la s de string) convierte una cadena JSON a un objeto Python. Es útil cuando los datos llegan como texto (por ejemplo, desde una API):
Escribir JSON en un fichero: json.dump()¶
El fichero alumno.json resultante:
{
"nombre": "Ana García",
"ciclo": "DAW",
"nota": 8.5,
"modulos": [
"Programación",
"Bases de Datos"
],
"aprobado": true
}
Los parámetros más útiles de json.dump():
indent: número de espacios para el indentado (hace el JSON legible). Si esNone, escribe todo en una línea.ensure_ascii=False: permite escribir caracteres no ASCII (tildes,ñ) directamente en lugar de codificarlos como\u00f3.
Escribir JSON a un string: json.dumps()¶
json.dumps() convierte un objeto Python a una cadena JSON sin escribirla en disco:
Limitaciones de serialización¶
No todos los tipos de Python se pueden serializar directamente a JSON. Los más habituales que no funcionan son: datetime, objetos de clases propias, set, tuple (se convierte a lista).
La solución más sencilla es convertir el valor a string antes de serializar:
Antipatrón: usar eval() para leer JSON