Cómo leer y analizar un archivo JSON en Python

Aprenda a leer, analizar y cargar archivos JSON en Python utilizando el módulo json integrado. Domine la conversión de cadenas JSON a diccionarios y viceversa.

Pruebe esta solución en el Editor

Descripción general

JSON (Notación de objetos JavaScript) es el formato de datos más popular para API, archivos de configuración y almacenamiento de datos. Python viene con un módulo `json` incorporado que hace que sea increíblemente sencillo leer, analizar y escribir datos JSON. Dado que los objetos JSON se asignan perfectamente a los diccionarios de Python y las matrices JSON se asignan a las listas de Python, trabajar con JSON se siente nativo.

Para leer JSON desde un archivo externo, utiliza la función `json.load()`, que analiza una secuencia de archivos y traduce las estructuras JSON a tipos de datos Python. Si los datos JSON ya están cargados en la memoria como una cadena, utilice la función `json.loads()` (la 's' significa cadena). Seleccionar la función correcta evita fallos del analizador.

Cuando se trabaja con JSON, es una buena práctica controlar los posibles errores de codificación y formato. El uso de `encoding="utf-8"` dentro de la declaración `open()` protege su secuencia de comandos para que no falle en caracteres especiales. Envolver las operaciones de archivos en un bloque `try-except` que detecte `json.JSONDecodeError` garantiza que su aplicación se degrade correctamente si el archivo JSON tiene un formato incorrecto.

Código y salida de ejecución

Este código demuestra cómo escribir un archivo JSON de muestra, leerlo y analizarlo nuevamente en un diccionario de Python y manejar una cadena JSON.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
Salida terminal
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

Implementación paso a paso

  • Importe el módulo json incorporado en su secuencia de comandos.
  • Abra el archivo JSON usando open("filename.json", "r", encoding="utf-8") como archivo.
  • Pase el objeto de archivo a json.load(file) para analizar el contenido en un diccionario de Python.
  • Utilice json.loads(string_data) si necesita analizar una cadena JSON sin formato que ya está cargada en la memoria.

Preguntas frecuentes

¿Cuál es la diferencia entre json.load() y json.loads()?

json.load() acepta un objeto de flujo similar a un archivo (lectura desde el disco), mientras que json.loads() acepta una cadena estándar o un objeto de bytes que contiene contenido JSON (lectura de la memoria).

¿Cómo manejo los errores de serialización JSON para clases personalizadas?

El módulo json de Python no puede serializar instancias de clases personalizadas de forma predeterminada. Primero debe proporcionar una clase de codificador personalizada que extienda json.JSONEncoder o extraer los atributos de la instancia en un diccionario usando un método auxiliar.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.