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:
import json
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:
true
/false
; en Python — True
/False
.null
; en Python — None
.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}
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"
# }
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
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
}
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)
JSON ↔ Python
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'>
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.indent
, sort_keys
).JSONDecodeError
.