¿Qué es JSON y por qué parsearlo?
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para la comunicación entre aplicaciones. A pesar de su nombre, JSON no depende de JavaScript y se utiliza activamente en todos los lenguajes de programación modernos.
Principales ventajas de JSON:
- Formato legible para humanos
- Estructura de datos simple
- Soporte universal
- Compacto en comparación con XML
Ejemplo de un objeto JSON:
{
"name": "Alice",
"age": 30,
"is_active": true,
"hobbies": ["reading", "cycling", "traveling"]
}
El módulo json integrado en Python
Python ofrece un potente módulo integrado llamado json para trabajar con datos JSON. Este módulo permite realizar dos operaciones principales:
- Deserialización — convertir una cadena JSON en objetos de Python
- Serialización — convertir objetos de Python en una cadena JSON
Para empezar, importamos el módulo:
import json
Parsear una cadena JSON a objetos de Python
Usando json.loads()
La función json.loads() (load string) convierte una cadena JSON en el objeto de Python correspondiente:
import json
json_data = '{"name": "Bob", "age": 25, "is_active": false}'
parsed_data = json.loads(json_data)
print(parsed_data) # {'name': 'Bob', 'age': 25, 'is_active': False}
print(type(parsed_data)) # <class 'dict'>
Después del parseo, puedes trabajar con los datos como si fueran un diccionario normal:
print(parsed_data['name']) # Bob
print(parsed_data['age']) # 25
Correspondencia de tipos de datos
Los tipos JSON se convierten automáticamente a tipos de Python:
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number | int/float |
| true/false | True/False |
| null | None |
Convertir objetos de Python a JSON
Usando json.dumps()
La función json.dumps() convierte objetos de Python en una cadena JSON:
data = {'name': 'Alice', 'age': 30, 'is_active': True}
json_string = json.dumps(data)
print(json_string) # {"name": "Alice", "age": 30, "is_active": true}
Parámetros de formato
Para mejorar la legibilidad, usa parámetros adicionales:
data = {'name': 'Alice', 'age': 30, 'city': 'Madrid'}
json_pretty = json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False)
print(json_pretty)
Parámetros principales:
indent— sangrías para el formatosort_keys— ordenar las clavesensure_ascii— soporte para caracteres Unicode
Trabajar con archivos JSON
Leer JSON desde un archivo
Usa json.load() para leer datos JSON desde un archivo:
with open('data.json', 'r', encoding='utf-8') as file:
content = json.load(file)
print(content)
Escribir JSON en un archivo
La función json.dump() escribe datos en un archivo:
data = {'city': 'Madrid', 'temperature': 25, 'weather': 'soleado'}
with open('weather.json', 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4, ensure_ascii=False)
Recomendaciones para trabajar con archivos
- Siempre especifica la codificación
utf-8para evitar problemas con caracteres especiales - Usa el administrador de contexto
withpara asegurar que el archivo se cierre correctamente - Para archivos grandes, considera usar
ijsonpara un parseo eficiente en streaming