Saltar al contenido principal
InicioAcerca de PythonAprender Python

Datos JSON en Python

Trabajar con JSON en Python: Una guía paso a paso para principiantes
Actualizado abr 2024  · 6 min leer

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:

  1. 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.
  2. 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.
  3. 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. 

Proceso de solicitud JSON

Ejemplo de datos JSON

{
  "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"
  }
}

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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

  1. json. Es un paquete integrado de Python que proporciona métodos para codificar y descodificar datos JSON.
  2. simplejson. Este paquete proporciona un codificador y descodificador JSON rápido que admite tipos específicos de Python.
  3. ujson. Este paquete es un codificador y descodificador JSON ultrarrápido para Python.
  4. 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:

Datos de 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:

  1. Utiliza las bibliotecas cjson o ujson. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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. 

Temas

Más información sobre Python

Course

Introduction to Databases in Python

4 hr
95.2K
In this course, you'll learn the basics of relational databases and how to interact with them.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Programación orientada a objetos (POO) en Python: Tutorial

Aborda los fundamentos de la Programación Orientada a Objetos (POO) en Python: explora las clases, los objetos, los métodos de instancia, los atributos y ¡mucho más!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

tutorial

Cómo comentar un bloque de código en Python

Utilizar comentarios es fundamental para trabajar eficazmente con Python. En este breve tutorial, aprenderás a comentar un bloque de código en Python.
Adel Nehme's photo

Adel Nehme

3 min

tutorial

Guía completa de programación de sockets en Python

Aprende los fundamentos de la programación de sockets en Python
Serhii Orlivskyi's photo

Serhii Orlivskyi

41 min

tutorial

Tutorial de Python: Streamlit

Este tutorial sobre Streamlit está pensado para ayudar a los científicos de datos o ingenieros de machine learning que no son desarrolladores web y no están interesados en pasar semanas aprendiendo a utilizar estos marcos para crear aplicaciones web.
Nadia mhadhbi's photo

Nadia mhadhbi

18 min

tutorial

Tutorial de Pandas: DataFrames en Python

Explora el análisis de datos con Python. Los DataFrames de Pandas facilitan la manipulación de tus datos, desde la selección o sustitución de columnas e índices hasta la remodelación de tus datos.
Karlijn Willems's photo

Karlijn Willems

20 min

tutorial

Tutorial de instalación de Anaconda en Windows

Este tutorial te mostrará cómo puedes instalar Anaconda, un potente gestor de paquetes, en Microsoft Windows.
DataCamp Team's photo

DataCamp Team

5 min

See MoreSee More