Lección 09 · 03 Datos del mundo real
JSON: el idioma de las APIs
Casi todo lo que intercambian los programas por internet, incluidas las respuestas de los modelos de IA, viaja en JSON. Y en Python, JSON son diccionarios y listas.
De texto a datos: json.loads
JSON es texto con una forma concreta. json.loads() lo convierte en diccionarios y listas de Python:
import json
texto = '{"cliente": "Acme", "importe": 120.5, "pagada": false, "lineas": ["licencia", "soporte"]}'
factura = json.loads(texto)
print(factura["cliente"], factura["importe"])
print(factura["pagada"]) # false de JSON pasa a False de Python
print(factura["lineas"][1])import json carga el módulo de la biblioteca estándar. Se escribe una vez, arriba del programa.
De datos a texto: json.dumps
import json
ficha = {"nombre": "Lucía", "intereses": ["IA", "Python"], "acepta_correos": True}
print(json.dumps(ficha, ensure_ascii=False))
print(json.dumps(ficha, ensure_ascii=False, indent=2))ensure_ascii=False deja las tildes tal cual; indent=2 lo hace legible.
Datos anidados
Se baja nivel a nivel, combinando claves y posiciones:
import json
respuesta = json.loads('{"datos": {"usuarios": [{"email": "[email protected]"}, {"email": "[email protected]"}]}}')
for u in respuesta["datos"]["usuarios"]:
print(u["email"])true, false y null; Python usa True, False y None. Y en JSON las claves y los textos van siempre con comillas dobles.Lee una respuesta
Convierte respuesta en datos y guarda en total el número de pedidos de la lista "pedidos". Imprime total.
¿Atascado? Ver pista
datos = json.loads(respuesta) y después total = len(datos["pedidos"]).
Prepara un JSON
Crea el diccionario peticion con "modelo": "practica", "temperatura": 0.2 y "mensajes": una lista con el texto "Resume este informe". Guarda en cuerpo el JSON en texto (con json.dumps) e imprímelo.
¿Atascado? Ver pista
Construye el diccionario y luego cuerpo = json.dumps(peticion, ensure_ascii=False).
Filtra los pendientes
De la lista de facturas en JSON, guarda en pendientes los id de las que tienen "pagada": false. Imprime la lista.
¿Atascado? Ver pista
for f in json.loads(texto):
if not f["pagada"]:
pendientes.append(f["id"])