Course
Datos JSON en Python
Introducción
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. Gracias a su sencilla sintaxis y a su capacidad para representar estructuras de datos complejas, JSON se ha convertido en una parte integral del desarrollo web moderno, impulsando desde API hasta aplicaciones web del lado del cliente.
En este tutorial, exploraremos los aspectos básicos del trabajo con JSON en Python, incluyendo la serialización, deserialización, lectura y escritura de archivos JSON, formateo y mucho más. Al final de este tutorial, los lectores podrán:
- Comprender JSON y sus ventajas e inconvenientes
- Identificar casos de uso de JSON y compáralo con alternativas comunes
- Serializar y deserializar datos JSON eficazmente en Python
- Trabajar con datos JSON en lenguaje de programación Python
- Formatear datos JSON en Python usando la biblioteca `json`.
- Optimizar el rendimiento al trabajar con datos json
- Gestionar 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, ampliamente adoptado y admitido por muchos lenguajes y marcos de programación. Es una buena elección para el intercambio de datos cuando se necesita un formato sencillo y fácil de leer que admita estructuras de datos complejas y pueda compartirse fácilmente entre distintos programas informáticos.
El caso de uso perfecto para JSON es cuando existe la necesidad de intercambiar datos entre aplicaciones basadas en 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 anidados y matrices, lo que facilita la representación y el intercambio de datos estructurados entre distintos sistemas. Otros casos de uso del formato JSON son:
- Interfaz de programación de aplicaciones (API). JSON se utiliza habitualmente para construir API (Interfaces de Programación de Aplicaciones) que permiten que distintos sistemas y aplicaciones se comuniquen entre sí. Por ejemplo, muchas API basadas en la web utilizan JSON como formato para intercambiar datos entre distintas 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 para la aplicación, como la disposición de una interfaz de usuario o las preferencias del 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
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"is_employee": true,
"hobbies": [
"reading",
"playing soccer",
"traveling"
],
"address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"zip": "10001"
}
}
En este ejemplo, tenemos un objeto JSON que representa a una persona. El objeto tiene varias propiedades: "name", "age", "email" e "is_employee". La propiedad "hobbies" es una matriz que contiene tres cadenas. La propiedad "address" es un objeto con varias propiedades propias, como "street", "city", "state" y "zip".
Ten en cuenta que los datos JSON suelen formatearse como una serie de pares clave-valor, con la clave representada como una cadena y el valor representado en varios tipos, como cadena, número, booleano, matriz u objeto.
Ventajas y desventajas de utilizar JSON
A continuación, hemos recogido algunos de los aspectos positivos y negativos 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 los usuarios no técnicos. También son ligeros, lo que significa que pueden transmitirse fácilmente por Internet.
- Interoperable: los archivos JSON son interoperables, lo que significa que pueden intercambiarse fácilmente entre distintos sistemas y plataformas. Esto se debe a que JSON es un formato estándar ampliamente admitido, y muchas aplicaciones y servicios utilizan JSON para el intercambio de datos. Como resultado, trabajar con archivos JSON puede facilitar la integración de distintas partes de un sistema o compartir datos entre distintas aplicaciones.
- Fácil de validar: los archivos JSON pueden validarse fácilmente con un esquema para garantizar que se ajustan a una estructura o conjunto de reglas específico. Esto puede ayudar a detectar errores e incoherencias en los datos desde el principio, lo que puede ahorrar tiempo y evitar problemas más adelante. Los esquemas JSON también pueden utilizarse para generar automáticamente documentación sobre los datos almacenados en el archivo JSON.
Contras de trabajar con un archivo JSON:
- Las estructuras de datos complejas se admiten de forma limitada: aunque los archivos JSON admiten una amplia gama de tipos de datos, no son adecuados para almacenar estructuras de datos complejas, como grafos o árboles. Esto puede dificultar el trabajo con determinados tipos de datos utilizando archivos JSON.
- No se aplica el esquema: los archivos JSON no aplican ningún esquema, lo que significa que es posible almacenar datos incoherentes 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 capacidad 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.
Principales alternativas a JSON para un intercambio de datos eficaz
Hay varias alternativas a JSON que pueden utilizarse para el intercambio o almacenamiento de datos, cada una con sus propios puntos fuertes y débiles. 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 para describir los datos. Es un formato más verboso que JSON, pero tiene admite bien la validación del esquema y la estructura del documento.
- YAML (Yet Another Markup Language). YAML es un formato de serialización de datos legible por humanos que está 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 binario diseñado para ser más compacto y eficiente que JSON. Admite tipos de datos complejos y es ideal para transferir datos a través de redes con poco ancho de banda.
- Protocol Buffers. Los Protocol Buffers son un formato de serialización binaria desarrollado por Google. Está diseñado para ser muy eficiente y admite ampliamente la validación de esquemas, lo que lo hace ideal para sistemas distribuidos a gran escala.
- BSON (JSON binario). BSON es un formato de serialización binario que amplía el formato JSON con tipos de datos adicionales y optimizaciones para la eficiencia. Está diseñado para almacenar y transferir datos de forma eficiente 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 sencillez, 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 Python para trabajar con datos JSON
Hay algunos paquetes populares de Python que puedes utilizar para trabajar con archivos JSON:
- json. Es un paquete integrado de Python que proporciona métodos para codificar y descodificar datos JSON.
- simplejson. Este paquete proporciona un codificador y descodificador JSON rápido que admite tipos específicos de Python.
- ujson. Este paquete es un codificador y descodificador JSON ultrarrápido para Python.
- jsonschema. Este paquete proporciona una forma de validar datos JSON según un esquema especificado.
Serialización y deserialización de JSON
La serialización y deserialización de JSON son los procesos de conversión de datos JSON a y desde otros formatos, como objetos o cadenas Python, para transmitir o almacenar los datos.
La serialización es el proceso de convertir un objeto o 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 en el desarrollo web, donde a menudo se transmiten datos entre distintos sistemas o aplicaciones.
La deserialización, por otro lado, 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 los datos recibidos de una API u otra fuente.
La serialización y deserialización de JSON son técnicas importantes para trabajar con datos JSON en diversos contextos, desde el desarrollo web al análisis de datos y otros. Muchos lenguajes de programación proporcionan bibliotecas o paquetes integrados para que la serialización y la deserialización sean fáciles y eficientes.
Aquí tienes algunas funciones comunes de la biblioteca json
que se utilizan para la serialización y la deserialización.
1. json.dumps()
Esta función sirve 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)
# output: {"name": "John", "age": 30}
2. json.loads()
Esta función se utiliza para convertir una cadena JSON 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)
# output: {'name': 'John', 'age': 30}
3. json.dump()
Esta función sirve 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)
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)
# output: {'name': 'John', 'age': 30}
Python y JSON tienen tipos de datos diferentes, y Python ofrece una gama más amplia de tipos de datos que JSON. Mientras que Python es capaz de almacenar intrincadas estructuras de datos como conjuntos y diccionarios, JSON se limita a manejar cadenas, números, booleanos, matrices y objetos. Veamos algunas diferencias:
Python |
JSON |
dict |
Object |
list |
Array |
tuple |
Array |
str |
String |
int |
Number |
float |
Number |
True |
true |
False |
false |
None |
null |
Lista Python a JSON
Para convertir una lista Python a 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)
En este ejemplo, tenemos una lista llamada my_list con una mezcla de números enteros y cadenas. 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.
Formatear datos JSON
En Python, la función json.dumps()
proporciona opciones para formatear y ordenar la salida JSON. Aquí tienes algunas opciones habituales:
1. Sangría
Esta opción especifica el número de espacios a utilizar 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)
```
This will produce 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 por orden alfabético. Por ejemplo:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_data = json.dumps(data, sort_keys=True)
print(json_data)
Esto producirá una cadena con formato JSON con las claves en orden alfabético:
{"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 separadores toma una tupla de dos cadenas, donde la primera cadena es el separador entre pares clave-valor de objetos JSON, y la segunda cadena es el separador entre elementos de matrices JSON. Por ejemplo:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_data = json.dumps(data, separators=(",", ":"))
print(json_data)
```
This will produce 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 Python - Datos JSON en APIs
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}")
SALIDA:
Este código utiliza la biblioteca requests
y la biblioteca json
de Python para hacer una petición a la URL "https://jsonplaceholder.typicode.com/posts" y recuperar datos. La línea requests.get(url)
realiza la petición 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 tiene éxito, el código carga el texto de respuesta en un diccionario Python utilizando el método json.loads() y lo almacena en la variable data.
Si quieres aprender más sobre este tema, consulta nuestro tutorial sobre APIs Web, Peticiones en Python y Realización de una Petición HTTP en Python.
Optimizar el rendimiento de JSON en Python
Cuando trabajas con grandes cantidades de datos JSON en Python, optimizar el rendimiento de tu código es importante para garantizar que se ejecuta con eficacia. Aquí tienes algunos consejos para optimizar el rendimiento de JSON en Python:
- Utiliza las bibliotecas
cjson
oujson
. 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 las conversiones innecesarias. La conversión de ida y vuelta entre objetos Python y datos JSON puede ser costosa 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 se trabaja con grandes cantidades de datos JSON, utilizar 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 por la red.
- Utiliza la caché. Si accedes con frecuencia a los mismos datos JSON, almacenarlos en caché puede mejorar el rendimiento al reducir el número de peticiones para cargar los datos.
- Optimizar la estructura de datos: La estructura de los datos JSON también puede afectar al rendimiento. Utilizar una estructura de datos más sencilla y plana puede mejorar el rendimiento respecto a una estructura compleja y anidada.
Limitaciones del formato JSON
Aunque JSON es un formato popular para el intercambio de datos en muchas aplicaciones, existen algunas limitaciones de implementación que debes conocer:
- Falta de compatibilidad con algunos tipos de datos. JSON admite de forma limitada ciertos tipos de datos, como datos binarios, fechas y horas. Aunque existen soluciones para representar estos tipos en JSON, esto puede complicar la serialización y deserialización.
- No admite los comentarios. A diferencia de otros formatos, como YAML y XML, JSON no admite comentarios. Esto puede hacer más difícil añadir comentarios a los datos JSON para proporcionar contexto o documentación.
- Flexibilidad limitada para las ampliaciones. Aunque JSON admite extensiones mediante propiedades personalizadas o la propiedad $schema, el formato no ofrece tanta flexibilidad para las extensiones como otros formatos, como XML o YAML.
- No hay norma para preservar el orden de las claves. JSON no tiene una forma estándar de preservar el orden de las claves en un objeto, lo que dificulta la comparación o fusión de objetos JSON.
- Admite de forma limitada las referencias circulares. JSON admite de forma limitada las referencias circulares, en las que un objeto hace referencia a sí mismo. Esto puede dificultar la representación de algunas estructuras de datos en JSON.
Es importante conocer estas limitaciones de implementación cuando trabajes con datos JSON para asegurarte de que el formato es adecuado para tus necesidades y evitar posibles problemas con la serialización, la deserialización y la representación de los 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 construyendo una API como si trabajas con aplicaciones web del lado del cliente, comprender los fundamentos de JSON en Python es una habilidad esencial para cualquier desarrollador moderno. Si dominas las técnicas descritas en este tutorial, estarás bien encaminado para trabajar con datos JSON en Python y construir aplicaciones robustas y escalables que aprovechen la potencia de este potente formato de intercambio de datos.
Si quieres aprender a construir canalizaciones para importar datos guardados en formatos de almacenamiento comunes, consulta nuestro artículo Ingestión racionalizada de datos con pandas con pandas. Utilizarás pandas, una importante biblioteca de Python para análisis, para obtener datos de diversas fuentes, como una hoja de cálculo de respuestas a encuestas, una base de datos de solicitudes de servicios públicos y una API de un popular sitio de reseñas.
Más información sobre Python
Course
Introduction to Importing Data in Python
Course
Introduction to MongoDB in Python
blog
Cómo aprender Python desde cero en 2024: Guía del experto
tutorial
Desarrollo de backend en Python: Guía completa para principiantes
Oluseye Jeremiah
26 min
tutorial
Tutorial de pandas en Python: la guía definitiva para principiantes
tutorial
Configurar VSCode para Python: Guía completa
tutorial
Tutorial de FastAPI: Introducción al uso de FastAPI
tutorial