Lección 26 de 45 · Errores y archivos

JSON y CSV

Aprende a elegir entre JSON y CSV por la forma de los datos, y a convertirlos sin confundir texto serializado con objetos de Python.

Datos estructuradosComparación de formatosCSV
Índice · Lección 26/45
Guardar texto no basta cuando los datos tienen estructura

Una lista de alumnos tiene filas y columnas. Una configuración puede contener listas, números, booleanos y objetos anidados. Podrías inventar tu propio formato de texto, pero después también tendrías que inventar cómo leerlo.

JSON y CSV son dos formatos comunes. La pregunta útil no es «¿cuál es mejor?», sino «¿qué forma tienen mis datos?».

Evidencia de aprendizaje

Elegir JSON o CSV por la forma de los datos y procesar un ejemplo mínimo de ambos formatos.

JSON conserva estructuras parecidas a listas y diccionarios

De texto JSON a objetos de Python
import json

texto = '{"curso": "Python", "activo": true}'
datos = json.loads(texto)
print(datos["curso"])
print(datos["activo"])

json.loads() recibe un string con JSON y devuelve estructuras de Python. En este caso obtienes un diccionario con un string y un booleano.

Después de convertirlo, ya no trabajas con llaves y comillas como texto: trabajas con datos["curso"].

dumps hace el viaje contrario: Python hacia JSON

Serializar un diccionario
import json

perfil = {"nombre": "Ada", "nivel": 2}
texto = json.dumps(perfil, ensure_ascii=False)
print(texto)

Serializar significa convertir una estructura en una representación que puedas guardar o enviar. dumps devuelve un string; no crea un archivo automáticamente.

CSV encaja cuando piensas naturalmente en una tabla

Si cada registro tiene las mismas columnas —por ejemplo nombre, edad y ciudad— CSV suele ser más directo. No representa estructuras anidadas tan bien como JSON.

Leer dos filas CSV desde texto
import csv
from io import StringIO

texto = "nombre,edad\nAda,36\nGuido,35"
lector = csv.DictReader(StringIO(texto))
for fila in lector:
    print(fila["nombre"])

DictReader usa la cabecera para entregar cada fila como un diccionario. Así puedes pensar en nombres de columnas en lugar de posiciones.

No confundas el formato externo con el tipo que usas dentro del programa

Un archivo JSON es texto. Después de json.load() o json.loads(), tendrás listas, diccionarios, strings, números o booleanos de Python. Un CSV también es texto; el lector lo transforma en filas que puedes procesar.

Secuencia mental: formato externo → parsear → estructuras de Python → trabajar.

Elige el formato por la forma de los datos

JSON

Encaja bien con objetos y estructuras anidadas: perfil, configuración, respuesta de API.

CSV

Encaja bien con filas regulares que comparten columnas: ventas, mediciones, inventario.

Decide: una ficha de usuario con dirección anidada → JSON. Un registro de 5.000 ventas con fecha, producto e importe → CSV suele ser una representación natural.

Carril A · procesa JSON

Convierte el texto JSON en un diccionario y recupera el nombre.

Salida esperada
Ada
json.py
La salida aparecerá aquí.

Necesito una pista
  • Usa json.loads(texto).
Ver una solución razonada
import json

texto = '{"nombre": "Ada", "edad": 36}'
datos = json.loads(texto)
print(datos["nombre"])

Carril B · procesa CSV

Lee dos filas CSV como diccionarios y suma sus importes.

Salida esperada
2
32
csv.py
La salida aparecerá aquí.

Necesito una pista
  • Crea csv.DictReader(io.StringIO(texto)).
  • Puedes hacer filas = list(...).
Ver una solución razonada
import csv
import io

texto = "producto,importe\nLibro,12\nJuego,20\n"
filas = list(csv.DictReader(io.StringIO(texto)))

print(len(filas))
print(sum(int(fila["importe"]) for fila in filas))

Elige formato por estructura, no por costumbre

Forzar datos anidados en CSV suele crear columnas extrañas; envolver una tabla sencillísima en JSON puede añadir ruido innecesario.

Como regla inicial: tabla regular → CSV; estructura con niveles, listas o configuración → JSON. Habrá excepciones, pero este criterio te orienta bien al empezar.

Tu salida de esta lección es una decisión razonada

  • Sabes que JSON y CSV son representaciones de texto.
  • Puedes explicar qué hace json.loads().
  • Puedes justificar por qué una tabla simple suele encajar bien en CSV.
No necesitas memorizar toda la API

Quédate con la conversión entre formato externo y estructuras de Python. Los detalles de lectura y escritura se consultan cuando los necesites.