Cómo trabajar con JSON en Python: lectura, escritura y buenas prácticas

1. ¿Qué es JSON?

Descripción general de JSON

JSON (JavaScript Object Notation) es un formato ligero y muy eficiente para el intercambio de datos. Se utiliza principalmente en la comunicación entre aplicaciones web y servidores. Aunque se basa en JavaScript, es compatible con casi todos los lenguajes de programación. En especial, JSON desempeña un papel fundamental en la obtención y envío de datos mediante API.

Estructura de JSON

JSON está compuesto por pares de clave y valor, y los datos se encierran entre llaves {}. Imagina el siguiente ejemplo sencillo:
{
    "name": "John",
    "age": 30,
    "isStudent": false,
    "courses": ["Math", "Physics", "Chemistry"]
}
Esta estructura puede incluir listas y objetos anidados, lo que lo hace muy flexible.

2. Método básico para leer archivos JSON en Python

Introducción a la librería json de Python

En Python, se puede manipular archivos JSON fácilmente con la librería estándar json. No requiere instalación adicional y proporciona funciones básicas para leer y escribir archivos desde el inicio.

Cómo leer un archivo JSON

Aquí se explica cómo usar la función json.load() para leer datos desde un archivo. El siguiente ejemplo carga un archivo JSON y lo manipula como un diccionario:
import json

with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

print(data)
侍エンジニア塾

3. Cómo leer una cadena JSON en Python

Uso de la función json.loads()

Cuando se recibe un JSON en formato de cadena y se desea convertirlo en un diccionario de Python, se utiliza json.loads(). Este método es común al procesar respuestas de API:
import json

json_string = '{"name": "Alice", "age": 25, "city": "Tokyo"}'
data = json.loads(json_string)

print(data)
De esta forma, los datos JSON en formato de cadena se convierten fácilmente en un diccionario.

4. Precauciones y manejo de errores al leer archivos JSON

Errores comunes y soluciones

Uno de los errores más frecuentes al leer un archivo JSON es JSONDecodeError, que ocurre cuando el archivo no está en un formato JSON válido. Es importante manejar estas excepciones y revisar los detalles del error.
import json

try:
    with open('data.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
except json.JSONDecodeError as e:
    print(f"Error al leer JSON: {e}")

Problemas de codificación

Cuando se trabaja con JSON que incluye caracteres en japonés u otros idiomas, es esencial especificar encoding='utf-8' para evitar problemas de caracteres ilegibles.

5. Procesamiento eficiente de datos JSON de gran tamaño

Procesamiento con eficiencia de memoria

Leer un archivo JSON muy grande de una sola vez puede generar falta de memoria. Para evitarlo, se recomienda usar librerías de streaming como ijson:
import ijson

with open('large_file.json', 'r', encoding='utf-8') as f:
    for item in ijson.items(f, 'item'):
        print(item)
Con ijson es posible manejar datos extensos de manera más eficiente.

6. Uso de los datos tras convertir JSON en diccionario de Python

Operaciones básicas con diccionarios

Al convertir JSON en un diccionario, la manipulación de datos se vuelve muy sencilla. Por ejemplo, se pueden obtener valores de claves específicas o actualizar información:
# Ejemplos de manipulación de diccionarios
print(data['name'])  # Muestra 'Alice'
data['age'] = 26  # Actualiza el valor
data['email'] = 'alice@example.com'  # Agrega una nueva clave y valor

7. Cómo escribir JSON en Python

Escritura en archivos JSON

Para guardar un diccionario en un archivo JSON en Python, se usa la función json.dump(). Esto permite almacenar los datos actualizados:
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=4, ensure_ascii=False)
El parámetro indent=4 organiza la salida de forma legible, mientras que ensure_ascii=False permite conservar los caracteres en su idioma original.
侍エンジニア塾