Curso
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en una opción popular para el intercambio de datos en muchos lenguajes de programación, incluido Python. Con su sintaxis sencilla y su capacidad para representar estructuras de datos complejas, JSON se ha convertido en una parte integral del desarrollo web moderno, impulsando todo, desde API hasta aplicaciones web del lado del cliente.
En este tutorial, exploraré los conceptos básicos para trabajar con JSON en Python, incluyendo la serialización, deserialización, lectura y escritura de archivos JSON, formateo y mucho más. Al finalizar este tutorial, tú:
- Comprender JSON y sus ventajas y desventajas.
- Identifica casos de uso para JSON y compáralos con alternativas comunes.
- Serializar y deserializar datos JSON de forma eficaz en Python
- Trabajar con datos JSON en el lenguaje de programación Python
- Formatear datos JSON en Python utilizando la biblioteca `json`.
- Optimizar el rendimiento al trabajar con datos json.
- Gestiona datos JSON en el desarrollo de API.
¿Qué es JSON?
JSON (JavaScript Object Notation) es un formato de intercambio de datos ligero e independiente del lenguaje que es ampliamente adoptado y compatible con muchos lenguajes de programación y marcos de trabajo. Es una buena opción para el intercambio de datos cuando se necesita un formato sencillo y fácil de leer que admita estructuras de datos complejas y que se pueda compartir fácilmente entre diferentes programas informáticos.
El caso de uso perfecto para JSON es cuando es necesario intercambiar datos entre aplicaciones basadas en la web, como cuando rellenas un formulario en un sitio web y la información se envía a un servidor para su procesamiento.
JSON es ideal para este escenario porque es un formato ligero y eficiente que requiere menos ancho de banda y espacio de almacenamiento que otros formatos como XML. Además, JSON admite estructuras de datos complejas, como objetos y arreglos anidados, lo que facilita la representación y el intercambio de datos estructurados entre diferentes sistemas. Otros casos de uso del formato JSON son:
- Interfaz de programación de aplicaciones (API). JSON se utiliza habitualmente para crear API (interfaces de programación de aplicaciones) que permiten que diferentes sistemas y aplicaciones se comuniquen entre sí. Por ejemplo, muchas API basadas en web utilizan JSON como formato de datos para intercambiar datos entre diferentes aplicaciones, lo que facilita la integración con diferentes lenguajes de programación y plataformas.
- Archivos de configuración. JSON proporciona un formato sencillo y fácil de leer para almacenar y recuperar datos de configuración. Esto puede incluir ajustes de la aplicación, como el diseño de la interfaz de usuario o las preferencias de usuario.
- IoT (Internet de las cosas). Los dispositivos IoT suelen generar grandes cantidades de datos, que pueden almacenarse y transmitirse entre sensores y otros dispositivos de forma más eficiente utilizando JSON.

Ejemplo de datos JSON
python_obj = {
"name": "John Doe",
"age": 30,
"email": "[email protected]",
"is_employee": True,
"hobbies": [
"reading",
"playing soccer",
"traveling"
],
"address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"zip": "10001"
}
}
print(python_obj)
En este ejemplo, tenemos un objeto JSON que representa a una persona. El objeto tiene varias propiedades: nombre, edad, correo electrónico y es_empleado. La propiedad hobbies es un arreglo que contiene tres cadenas. La propiedad «dirección» es un objeto con varias propiedades propias, como calle, ciudad, estado y código postal.
Ten en cuenta que los datos JSON suelen tener un formato de serie de pares clave-valor, en los que la clave se representa como una cadena y el valor se representa en varios tipos, como cadena, número, booleano, arreglo u objeto.
Ventajas y desventajas de usar JSON
A continuación, hemos seleccionado algunas de las ventajas y desventajas de utilizar JSON.
Ventajas de trabajar con un archivo JSON:
Algunas de las principales ventajas de JSON incluyen el hecho de que es:
- Ligero y fácil de leer. Los archivos JSON son fáciles de leer y comprender, incluso para usuarios sin conocimientos técnicos. También son ligeros, lo que significa que se pueden transmitir fácilmente por Internet.
- Interoperable: Los archivos JSON son interoperables, lo que significa que pueden intercambiarse fácilmente entre diferentes sistemas y plataformas. Esto se debe a que JSON es un formato estándar ampliamente compatible, y muchas aplicaciones y servicios utilizan JSON para el intercambio de datos. Como resultado, trabajar con archivos JSON puede facilitar la integración de diferentes partes de un sistema o el intercambio de datos entre diferentes aplicaciones.
- Fácil de validar: Los archivos JSON se pueden validar fácilmente con un esquema para garantizar que se ajustan a una estructura o conjunto de reglas específicos. Esto puede ayudar a detectar errores e inconsistencias en los datos desde el principio, lo que puede ahorrar tiempo y evitar problemas más adelante. Los esquemas JSON también se pueden utilizar para generar automáticamente documentación sobre los datos almacenados en el archivo JSON.
Inconvenientes de trabajar con un archivo JSON:
- Soporte limitado para estructuras de datos complejas: Aunque los archivos JSON admiten una amplia gama de tipos de datos, no son adecuados para almacenar estructuras de datos complejas, como gráficos o árboles. Esto puede dificultar el trabajo con ciertos tipos de datos utilizando archivos JSON.
- Sin aplicación de esquemas: Los archivos JSON no imponen ningún esquema, lo que significa que es posible almacenar datos inconsistentes o no válidos en un archivo JSON. Esto puede provocar errores y fallos en las aplicaciones que dependen de los datos del archivo.
- Capacidades limitadas de consulta e indexación: Los archivos JSON no ofrecen el mismo nivel de capacidades de consulta e indexación que las bases de datos tradicionales. Esto puede dificultar la realización de búsquedas complejas o la recuperación de subconjuntos específicos de datos de un archivo JSON de gran tamaño.
Las mejores alternativas a JSON para un intercambio de datos eficiente
Existen varias alternativas a JSON que pueden utilizarse para el intercambio o almacenamiento de datos, cada una con sus propias ventajas e inconvenientes. Algunas de las alternativas populares a JSON son:
- XML (Lenguaje de marcado extensible). XML es un lenguaje de marcado que utiliza etiquetas para definir elementos y atributos con el fin de describir los datos. Es un formato más detallado que JSON, pero ofrece un sólido soporte para la validación de esquemas y la estructura de documentos.
- YAML (Yet Another Markup Language, otro lenguaje de marcado más). YAML es un formato de serialización de datos legible por humanos, diseñado para ser fácil de leer y escribir. Es un formato más conciso que XML y admite tipos de datos complejos y comentarios.
- MessagePack. MessagePack es un formato de serialización binaria diseñado para ser más compacto y eficiente que JSON. Es compatible con tipos de datos complejos y resulta ideal para transferir datos a través de redes de bajo ancho de banda.
- Búferes de protocolo. Protocol Buffers es un formato de serialización binaria desarrollado por Google. Está diseñado para ser altamente eficiente y cuenta con un sólido soporte para la validación de esquemas, lo que lo hace ideal para sistemas distribuidos a gran escala.
- BSON (Binary JSON). BSON es un formato de serialización binaria que amplía el formato JSON con tipos de datos adicionales y optimizaciones para mejorar la eficiencia. Está diseñado para el almacenamiento y la transferencia eficientes de datos en bases de datos MongoDB.
La elección del formato de intercambio de datos depende del caso de uso específico y de los requisitos de la aplicación. JSON sigue siendo una opción popular debido a su simplicidad, versatilidad y amplia adopción, pero otros formatos como XML, YAML, MessagePack, Protocol Buffers y BSON pueden ser más adecuados para determinados casos de uso.
Bibliotecas de Python para trabajar con datos JSON
Hay algunos paquetes populares de Python que puedes utilizar para trabajar con archivos JSON:
- json. Este es un paquete integrado de Python que proporciona métodos para codificar y descodificar datos JSON.
- simplejson. Este paquete proporciona un codificador y decodificador JSON rápido compatible con tipos específicos de Python.
- ujson. Este paquete es un codificador y decodificador JSON ultrarrápido para Python.
- jsonschema. Este paquete proporciona una forma de validar datos JSON con respecto a un esquema especificado.
Serialización y deserialización JSON
La serialización y deserialización JSON son los procesos de conversión de datos JSON a otros formatos, como objetos o cadenas Python, y viceversa, con el fin de transmitir o almacenar los datos.
La serialización es el proceso de convertir un objeto o una estructura de datos en una cadena JSON. Este proceso es necesario para transmitir o almacenar los datos en un formato que puedan leer otros sistemas o programas. La serialización JSON es una técnica habitual utilizada en el desarrollo web, donde los datos se transmiten a menudo entre diferentes sistemas o aplicaciones.
Por otro lado, la deserialización es el proceso de convertir una cadena JSON de nuevo en un objeto o estructura de datos. Este proceso es necesario para utilizar los datos en un programa o sistema. La deserialización JSON se utiliza a menudo en el desarrollo web para analizar datos recibidos de una API u otra fuente.
La serialización y deserialización JSON son técnicas importantes para trabajar con datos JSON en diversos contextos, desde el desarrollo web hasta el análisis de datos y mucho más. Muchos lenguajes de programación proporcionan bibliotecas o paquetes integrados para facilitar y optimizar la serialización y deserialización.
A continuación se muestran algunas funciones comunes de la biblioteca json que se utilizan para la serialización y deserialización.
1. json.dumps()
Esta función se utiliza para serializar un objeto Python en una cadena JSON. La función dumps() toma un único argumento, el objeto Python, y devuelve una cadena JSON. Aquí tienes un ejemplo:
import json
# Python object to JSON string
python_obj = {'name': 'John', 'age': 30}
json_string = json.dumps(python_obj)
print(json_string)
# Expected output: {"name": "John", "age": 30}
2. json.loads()
Esta función se utiliza para analizar una cadena JSON y convertirla en un objeto Python. La función loads() toma un único argumento, la cadena JSON, y devuelve un objeto Python. Aquí tienes un ejemplo:
import json
# JSON string to Python object
json_string = '{"name": "John", "age": 30}'
python_obj = json.loads(json_string)
print(python_obj)
# Expected output: {'name': 'John', 'age': 30}
3. json.dump()
Esta función se utiliza para serializar un objeto Python y escribirlo en un archivo JSON. La función dump() toma dos argumentos: el objeto Python y el objeto archivo. Aquí tienes un ejemplo:
import json
# serialize Python object and write to JSON file
python_obj = {'name': 'John', 'age': 30}
with open('data.json', 'w') as file:
json.dump(python_obj, file)
# No expected output
4. json.load()
Esta función se utiliza para leer un archivo JSON y analizar su contenido en un objeto Python. La función load() toma un único argumento, el objeto archivo, y devuelve un objeto Python. Aquí tienes un ejemplo:
import json
# read JSON file and parse contents
with open('data.json', 'r') as file:
python_obj = json.load(file)
print(python_obj)
# Expected output: {'name': 'John', 'age': 30}
Python y JSON tienen diferentes tipos de datos, y Python ofrece una gama más amplia de tipos de datos que JSON. Mientras que Python es capaz de almacenar estructuras de datos complejas, como conjuntos y diccionarios, JSON se limita a manejar cadenas, números, booleanos, arreglos y objetos. Veamos algunas de las diferencias:
|
Python |
JSON |
|
dict |
Objeto |
|
lista |
Arreglo |
|
tupla |
Arreglo |
|
str |
Cadena |
|
int |
Número |
|
flotar |
Número |
|
Verdadero |
verdadero |
|
Falso |
false |
|
Ninguno |
nulo |
Lista de Python a JSON
Para convertir una lista de Python al formato JSON, puedes utilizar el método json.dumps() de la biblioteca json.
import json
my_list = [1, 2, 3, "four", "five"]
json_string = json.dumps(my_list)
print(json_string)
# Expected output: [1, 2, 3, "four", "five"]
En este ejemplo, tenemos una lista llamada my_list con una mezcla de números enteros y cadenas de caracteres. A continuación, utilizamos el método json.dumps() para convertir la lista en una cadena con formato JSON, que almacenamos en la variable json_string.
Formateo de datos JSON
En Python, la función json.dumps() ofrece opciones para dar formato y ordenar la salida JSON. A continuación, se indican algunas opciones habituales:
1. Sangría
Esta opción especifica el número de espacios que se utilizarán para la sangría en la cadena JSON de salida. Por ejemplo:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_data = json.dumps(data, indent=2)
print(json_data)
# Expected output: a JSON formatted string with an indentation of 2 spaces for each level of nesting:
# {
# "name": "John",
# "age": 30,
# "city": "New York"
# }
2. Sort_keys
Esta opción especifica si las claves de la cadena JSON de salida deben ordenarse alfabéticamente. Por ejemplo:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_data = json.dumps(data, sort_keys=True)
print(json_data)
# Expected output: {"age": 30, "city": "New York", "name": "John"}
3. Separadores
Esta opción te permite especificar los separadores utilizados en la cadena JSON de salida. El parámetro separators toma una tupla de dos cadenas, donde la primera cadena es el separador entre los pares clave-valor del objeto JSON, y la segunda cadena es el separador entre los elementos de los arreglos JSON. Por ejemplo:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_data = json.dumps(data, separators=(",", ":"))
print(json_data)
# Expected output: a JSON formatted string with a comma separator between key-value pairs and a colon separator between keys and values:
# {"name":"John","age":30,"city":"New York"}
Ejemplo en Python: datos JSON en API
import requests
import json
url = "https://jsonplaceholder.typicode.com/posts"
response = requests.get(url)
if response.status_code == 200:
data = json.loads(response.text)
print(data)
else:
print(f"Error retrieving data, status code: {response.status_code}")
# Expected output: a JSON object as the response of the request
SALIDA FORMATEADA:

Este código utiliza las bibliotecas requests y json en Python para realizar una solicitud a la URL "https://jsonplaceholder.typicode.com/posts" y recuperar datos. La línea requests.get(url) realiza la solicitud real y almacena la respuesta en la variable response.
La línea if response.status_code == 200: comprueba si el código de respuesta es 200, lo que significa que la solicitud se ha realizado correctamente. Si la solicitud se realiza correctamente, el código carga el texto de respuesta en un diccionario de Python utilizando el método json.loads() y lo almacena en la variable data.
Si deseas obtener más información sobre este tema, consulta nuestro tutorial sobre API web, solicitudes Python y cómo realizar una solicitud HTTP en Python.
Optimización del rendimiento de JSON en Python
Cuando trabajas con grandes cantidades de datos JSON en Python, es importante optimizar el rendimiento de tu código para garantizar que se ejecute de manera eficiente. A continuación, se incluyen algunos consejos para optimizar el rendimiento de JSON en Python:
- Utiliza las bibliotecas
cjsonoujson. Estas bibliotecas son más rápidas que la biblioteca JSON estándar de Python y pueden mejorar significativamente el rendimiento de la serialización y deserialización de JSON. - Evita conversiones innecesarias. Convertir objetos Python a datos JSON y viceversa puede resultar costoso en términos de rendimiento. Si es posible, intenta trabajar directamente con datos JSON y evita conversiones innecesarias.
- Utiliza generadores para datos JSON de gran tamaño. Cuando trabajas con grandes cantidades de datos JSON, el uso de generadores puede ayudar a reducir el uso de memoria y mejorar el rendimiento.
- Minimiza la sobrecarga de la red. Al transmitir datos JSON a través de una red, minimizar la cantidad de datos transferidos puede mejorar el rendimiento. Utiliza técnicas de compresión como gzip para reducir el tamaño de los datos JSON antes de transmitirlos a través de una red.
- Utiliza el almacenamiento en caché. Si accedes con frecuencia a los mismos datos JSON, almacenarlos en caché puede mejorar el rendimiento al reducir el número de solicitudes necesarias para cargar los datos.
- Optimizar la estructura de datos: La estructura de los datos JSON también puede afectar al rendimiento. El uso de una estructura de datos más simple y plana puede mejorar el rendimiento en comparación con una estructura compleja y anidada.
Limitaciones del formato JSON
Aunque JSON es un formato muy utilizado para el intercambio de datos en muchas aplicaciones, hay algunas limitaciones de implementación que debes tener en cuenta:
- Falta de compatibilidad con algunos tipos de datos. JSON tiene compatibilidad limitada con ciertos tipos de datos, como datos binarios, fechas y horas. Aunque existen soluciones alternativas para representar estos tipos en JSON, pueden complicar la serialización y deserialización.
- Falta de soporte para comentarios. A diferencia de otros formatos, como YAML y XML, JSON no admite comentarios. Esto puede dificultar la adición de comentarios a los datos JSON para proporcionar contexto o documentación.
- Flexibilidad limitada para ampliaciones. Aunque JSON admite extensiones a través de propiedades personalizadas o la propiedad $schema, el formato no ofrece tanta flexibilidad para las extensiones como otros formatos, como XML o YAML.
- No existe un estándar para preservar el orden de las claves. JSON no tiene una forma estándar de conservar el orden de las claves en un objeto, lo que dificulta la comparación o fusión de objetos JSON.
- Soporte limitado para referencias circulares. JSON tiene un soporte limitado para referencias circulares, en las que un objeto se refiere a sí mismo. Esto puede dificultar la representación de algunas estructuras de datos en JSON.
Es importante tener en cuenta estas limitaciones de implementación cuando trabajes con datos JSON para asegurarte de que el formato sea adecuado para tus necesidades y evitar posibles problemas con la serialización, deserialización y representación de datos.
Conclusión
JSON es un formato versátil y muy utilizado para el intercambio de datos en el desarrollo web moderno, y Python proporciona un potente conjunto de herramientas para trabajar con datos JSON. Tanto si estás creando una API como si trabajas con aplicaciones web del lado del cliente, comprender los conceptos básicos de JSON en Python es una habilidad esencial para cualquier programador moderno. Al dominar las técnicas descritas en este tutorial, estarás bien encaminado para trabajar con datos JSON en Python y crear aplicaciones robustas y escalables que aprovechen la potencia de este potente formato de intercambio de datos.
Si deseas aprender a crear canalizaciones para importar datos almacenados en formatos comunes, consulta nuestra curso Ingestión de datos optimizada con pandas. Utilizarás pandas, una importante biblioteca de Python para análisis, para obtener datos de diversas fuentes, entre ellas una hoja de cálculo con respuestas a encuestas, una base de datos de solicitudes de servicios públicos y una API para un popular sitio web de reseñas.
Preguntas frecuentes
¿Cómo puedes manejar archivos JSON que son demasiado grandes para caber en la memoria?
Para trabajar con archivos JSON grandes que no caben en la memoria, puedes procesar los datos de forma incremental utilizando la biblioteca ijson de Python o leer el archivo línea por línea si el JSON está estructurado como una serie de objetos más pequeños. Por ejemplo:
import ijson
with open('large_file.json', 'r') as file:
for item in ijson.items(file, 'item'):
print(item) # Process each JSON item individually¿Cómo fusionas dos objetos JSON en Python?
Puedes fusionar dos objetos JSON deserializándolos primero en diccionarios de Python y, a continuación, actualizando un diccionario con el contenido del otro:
import json
json1 = '{"name": "Alice", "age": 25}'
json2 = '{"city": "New York", "hobbies": ["reading", "cycling"]}'
dict1 = json.loads(json1)
dict2 = json.loads(json2)
dict1.update(dict2)
merged_json = json.dumps(dict1)
print(merged_json)
# Output: {"name": "Alice", "age": 25, "city": "New York", "hobbies": ["reading", "cycling"]}¿Los datos JSON pueden incluir comentarios? ¿Cómo puedes gestionarlos en Python?
JSON no admite comentarios de forma nativa, pero si trabajas con un archivo JSON no estándar que incluye comentarios (por ejemplo, utilizando // o /* */), puedes preprocesar el archivo para eliminarlos antes de analizarlo. Aquí tienes un ejemplo:
import json
import re
with open('file_with_comments.json', 'r') as file:
content = file.read()
# Remove comments
content = re.sub(r'//.*?$|/\*.*?\*/', '', content, flags=re.DOTALL | re.MULTILINE)
data = json.loads(content)
print(data)
