Skip to main content

JSON — quick-ref Python

Propósito

Cargar un JSON, navegar anidamientos comunes y rescatar claves sin romper el pipeline. (Ver también: /metodos/etl_json_policies para contratos y serialización.)

Cargar y acceder (patrón mínimo)

import json
from pathlib import Path

# 1) Cargar desde archivo
with Path("path/to/file.json").open("r", encoding="utf-8") as f:
data = json.load(f)

# 2) Acceso directo a claves anidadas (ejemplo típico)
desired = data["true"]["Total"]["mean"]["data"]

# 3) Acceso defensivo (evita KeyError y documenta defaults)
d_true = data.get("true", {})
d_total = d_true.get("Total", {})
d_mean = d_total.get("mean", {})
desired2 = d_mean.get("data", [])

Este patrón resume tus ejemplos de acceso anidado en estructuras tipo data["true"]["Total"]["mean"]["data"].

Variantes útiles

  • json.loads si la fuente es una cadena (no un archivo).
  • Encoding: fuerza utf-8 para evitar sorpresas en contenedores.
  • Tipos numéricos: valida que los números entren como int/float (no strings).

Contrato mínimo (lectura segura)

  • Estructura esperada documentada en la ficha (ruta/clave raíz).
  • Defaults explícitos en .get() para listas/dicts vacíos.
  • Errores claros: encapsulá el acceso en una función que levante ValueError con contexto si falta una clave crítica.

Anti-patrones frecuentes

  • Encadenar [...] sin checks → rompe ante faltantes (preferí .get).
  • Modificar data in-place durante iteraciones profundas → hacé copias locales o componé un nuevo dict.
  • Exponer paths absolutos o sensibles en logs.

QA rápido

  • assert isinstance(desired, (list, dict)) según contrato.
  • sum(1 for _ in json.dumps(data)) no debería explotar; si falla, revisa serialización (ver etl_json_policies).