Lectura y escritura de JSON en Python (módulo json)

Python tiene soporte nativo para JSON a través del módulo estándar json. Esto significa que no hace falta instalar nada extra: viene incluido con Python.

Este módulo permite:

  • Convertir un string JSON a un diccionario de Python.
  • Convertir un diccionario de Python a un string JSON.
  • Leer y escribir archivos en formato JSON.

1. Importar el módulo json

import json

2. Convertir JSON a diccionario (json.loads)

Cuando recibimos datos en formato JSON (por ejemplo, desde una API), vienen como string. Podemos convertir ese string a un diccionario de Python usando json.loads().

Ejemplo:

import json

json_string = '{"nombre": "Ana", "edad": 28, "activo": true}'

# Convertir a diccionario de Python
objeto = json.loads(json_string)

print(objeto["nombre"])  # Ana
print(objeto["edad"])    # 28
print(objeto["activo"])  # True

Observaciones:

  • En JSON — true/false; en Python — True/False.
  • En JSON — null; en Python — None.

3. Convertir diccionario a JSON (json.dumps)

Si queremos enviar datos a un servidor o guardarlos en un archivo, debemos convertir un diccionario a JSON con json.dumps().

Ejemplo:

import json

usuario = {
    "nombre": "Luis",
    "edad": 35,
    "activo": False
}

# Convertir a JSON (string)
json_string = json.dumps(usuario)

print(json_string)
# {"nombre": "Luis", "edad": 35, "activo": false}

4. Formatear JSON con indent y sort_keys

Podemos hacer que el JSON generado sea más legible con sangría (indent) y orden de claves (sort_keys).

Ejemplo:

import json

datos = {"nombre": "Carlos", "edad": 40, "activo": True}

json_formateado = json.dumps(datos, indent=4, sort_keys=True)
print(json_formateado)

# Salida:
# {
#     "activo": true,
#     "edad": 40,
#     "nombre": "Carlos"
# }

5. Leer JSON desde un archivo (json.load)

Además de trabajar con strings, Python puede leer archivos JSON directamente.

Ejemplo (archivo usuario.json):

{
  "nombre": "María",
  "edad": 29,
  "activo": true
}

Código en Python:

import json

with open("usuario.json", "r", encoding="utf-8") as archivo:
    datos = json.load(archivo)

print(datos["nombre"])  # María

6. Escribir JSON en un archivo (json.dump)

Podemos guardar un diccionario de Python en un archivo .json.

Ejemplo:

import json

producto = {
    "codigo": 101,
    "descripcion": "Teclado mecánico",
    "precio": 1200.50,
    "disponible": True
}

with open("producto.json", "w", encoding="utf-8") as archivo:
    json.dump(producto, archivo, indent=4)

Esto genera un archivo producto.json con contenido como:

{
    "codigo": 101,
    "descripcion": "Teclado mecánico",
    "precio": 1200.5,
    "disponible": true
}

7. Manejo de errores al parsear JSON

Si el JSON está mal escrito, Python lanza un json.JSONDecodeError.

Ejemplo:

import json

json_invalido = '{nombre: "Ana"}'  # Incorrecto: faltan comillas dobles en la clave

try:
    datos = json.loads(json_invalido)
except json.JSONDecodeError as e:
    print("Error al parsear JSON:", e)

8. Conversión entre tipos JSON ↔ Python

JSONPython

object ↔ dict

array ↔ list

string ↔ str

number ↔ int/float

true ↔ True

false ↔ False

null ↔ None

Ejemplo:

import json

json_string = '{"numero": 10, "activo": false, "extra": null}'
objeto = json.loads(json_string)

print(type(objeto["numero"]))  # <class 'int'>
print(type(objeto["activo"]))  # <class 'bool'>
print(type(objeto["extra"]))   # <class 'NoneType'>

📊 Resumen

  • json.loads() — Convierte string JSON a diccionario Python.
  • json.dumps() — Convierte diccionario Python a string JSON.
  • json.load() — Lee JSON desde un archivo.
  • json.dump() — Escribe JSON a un archivo.
  • Admite formateo (indent, sort_keys).
  • Errores de sintaxis generan JSONDecodeError.