Acordeón de los Índices
Python JSON
🐍 Python y JSON: El Módulo json
Python proporciona un módulo built-in llamado json
que facilita trabajar con
datos en formato JSON. Este módulo permite realizar dos operaciones principales:
- Serialización (Encoding): Convertir objetos de Python a cadenas JSON.
- Deserialización (Decoding): Convertir cadenas JSON a objetos de Python.
Importando el Módulo json
:
Para comenzar a trabajar con JSON en Python, primero necesitas importar el módulo
json
:
import json
¿Por Qué JSON?
JSON se ha convertido en un estándar para el intercambio de datos en la web debido a sus siguientes características:
- Ligero: Tiene una sintaxis mínima, lo que resulta en archivos y transmisiones de datos más pequeños.
- Legible por Humanos: Su estructura basada en texto es fácil de entender.
- Fácil de Parsear por Máquinas: Los lenguajes de programación tienen bibliotecas para analizar y generar JSON fácilmente.
- Independiente del Lenguaje: JSON es un formato independiente del lenguaje, lo que permite la comunicación entre sistemas escritos en diferentes lenguajes.
Estructura Básica de JSON:
Los datos en JSON se representan principalmente mediante dos estructuras:
- Objetos: Colecciones de pares clave-valor. Las claves deben ser
cadenas y los valores pueden ser de los siguientes tipos: cadena, número, booleano,
otro objeto, array o null. En Python, esto se mapea a un diccionario. Los objetos
JSON están encerrados entre llaves
{}
. - Arrays: Listas ordenadas de valores. Los valores pueden ser de los
mismos tipos que los valores en un objeto. En Python, esto se mapea a una lista. Los
arrays JSON están encerrados entre corchetes
[]
.
Ejemplo de Estructura JSON:
{
"nombre": "Ana",
"edad": 30,
"ciudad": "Madrid",
"hobbies": ["leer", "viajar", "programar"],
"direccion": {
"calle": "Gran Vía, 1",
"codigo_postal": "28001"
},
"es_estudiante": false,
"cursos": null
}
En este ejemplo, vemos un objeto JSON que contiene diferentes tipos de valores, incluyendo cadenas, números, un array, otro objeto, un booleano y un valor null.
En los siguientes temas, aprenderemos cómo convertir datos JSON a objetos de Python y
viceversa utilizando el módulo json
.
JSON in Python
🐍 JSON en Python: Representación de Datos
Cuando trabajas con JSON en Python, es importante entender cómo los tipos de datos de
JSON se mapean a los tipos de datos de Python. El módulo json
realiza estas
conversiones automáticamente durante la serialización y deserialización.
Mapeo de Tipos de Datos JSON a Python:
Cuando deserializas (conviertes de JSON a Python), los tipos de datos JSON se convierten a los siguientes tipos de Python:
JSON | Python |
---|---|
object |
dict (diccionario) |
array |
list (lista) |
string |
str (cadena) |
number (integer) |
int (entero) |
number (float) |
float (flotante) |
true |
True (booleano) |
false |
False (booleano) |
null |
None (NoneType) |
Mapeo de Tipos de Datos Python a JSON:
Cuando serializas (conviertes de Python a JSON), los tipos de datos de Python se convierten a los siguientes tipos de JSON:
Python | JSON |
---|---|
dict |
object |
list , tuple |
array |
str |
string |
int , float |
number |
True |
true |
False |
false |
None |
null |
Trabajando con el Módulo json
:
El módulo json
proporciona principalmente dos pares de funciones para
realizar la serialización y deserialización:
json.loads()
: Deserializa una cadena JSON a un objeto de Python.json.load()
: Deserializa un archivo o un objeto similar a un archivo que contiene datos JSON a un objeto de Python.json.dumps()
: Serializa un objeto de Python a una cadena JSON.json.dump()
: Serializa un objeto de Python a un archivo o un objeto similar a un archivo en formato JSON.
En los siguientes temas, veremos ejemplos prácticos de cómo usar estas funciones para analizar (parsear) JSON y convertir desde Python a JSON.
Parse JSON - Convert from JSON to Python
⚙️ Parsear JSON: De JSON a Objetos Python
Usando json.loads()
: Analizar una Cadena JSON
La función json.loads()
se utiliza para analizar una cadena que contiene
datos en formato JSON y convertirla a un objeto de Python (generalmente un diccionario o
una lista).
import json
cadena_json = '{ "nombre":"Carlos", "edad":35, "ciudad":"Barcelona"}'
# Analizar la cadena JSON
objeto_python = json.loads(cadena_json)
# El resultado es un diccionario de Python
print(objeto_python)
print(type(objeto_python))
# Acceder a los valores del diccionario
print(objeto_python["nombre"])
print(objeto_python["edad"])
print(objeto_python["ciudad"])
Al ejecutar este código, la variable objeto_python
contendrá un diccionario
de Python con las claves y valores correspondientes a la cadena JSON.
Usando json.load()
: Analizar un Archivo JSON
La función json.load()
se utiliza para leer datos desde un archivo (o un
objeto similar a un archivo) que contiene formato JSON y convertirlo a un objeto de
Python.
Primero, necesitarías tener un archivo con contenido JSON (por ejemplo,
datos.json
):
datos.json
:
{
"empleados": [
{"nombre": "Elena", "departamento": "Ventas"},
{"nombre": "Javier", "departamento": "Marketing"}
]
}
Ahora, el código Python para leer y analizar este archivo sería:
import json
# Abrir el archivo JSON en modo lectura ('r')
with open('datos.json', 'r') as archivo:
# Cargar los datos JSON desde el archivo
datos_python = json.load(archivo)
# El resultado es un diccionario de Python
print(datos_python)
print(type(datos_python))
# Acceder a los datos
empleados = datos_python["empleados"]
for empleado in empleados:
print(f"Nombre: {empleado['nombre']}, Departamento: {empleado['departamento']}")
Es importante utilizar la sentencia with open(...)
para asegurarse de que el
archivo se cierre correctamente después de su uso.
Con estas funciones, puedes fácilmente convertir datos JSON que provienen de APIs, archivos de configuración o cualquier otra fuente a estructuras de datos nativas de Python con las que puedes trabajar de manera eficiente.
En el siguiente tema, veremos cómo realizar la operación inversa: convertir objetos de Python a formato JSON.
Convert from Python to JSON
➡️ Convertir de Python a JSON
Usando json.dumps()
: Convertir un Objeto Python a una Cadena JSON
La función json.dumps()
se utiliza para convertir un objeto de Python (como
un diccionario o una lista) en una cadena que representa ese objeto en formato JSON.
import json
# Un diccionario de Python
diccionario_python = {
"nombre": "Elena",
"edad": 28,
"ciudad": "Sevilla",
"hobbies": ["pintar", "bailar"],
"tiene_mascotas": True,
"cursos_completados": None
}
# Convertir el diccionario a una cadena JSON
cadena_json = json.dumps(diccionario_python)
# El resultado es una cadena JSON
print(cadena_json)
print(type(cadena_json))
# También podemos convertir una lista de Python a una cadena JSON
lista_python = [1, 2, "tres", True, None]
cadena_json_lista = json.dumps(lista_python)
print(cadena_json_lista)
print(type(cadena_json_lista))
Al ejecutar este código, cadena_json
contendrá una representación en formato
JSON del diccionario de Python, y cadena_json_lista
contendrá la
representación JSON de la lista.
Usando json.dump()
: Convertir un Objeto Python a un Archivo JSON
La función json.dump()
se utiliza para escribir un objeto de Python a un
archivo (o un objeto similar a un archivo) en formato JSON.
import json
# Un diccionario de Python
datos_a_guardar = {
"usuarios": [
{"id": 1, "nombre": "Sofía"},
{"id": 2, "nombre": "Mateo"}
]
}
# Abrir un archivo en modo escritura ('w')
with open('usuarios.json', 'w') as archivo:
# Escribir el diccionario al archivo en formato JSON
json.dump(datos_a_guardar, archivo)
print("Los datos han sido guardados en usuarios.json")
Este código creará un archivo llamado usuarios.json
(si no existe) y
escribirá el contenido del diccionario datos_a_guardar
en formato JSON
dentro de ese archivo.
Al igual que con json.load()
, es importante utilizar
with open(...)
para asegurar el manejo adecuado del archivo.
Con estas funciones, puedes fácilmente convertir tus estructuras de datos de Python a formato JSON para guardarlas en archivos, enviarlas a través de la red, o cualquier otra necesidad de intercambio de datos.
En los siguientes temas, exploraremos cómo formatear la salida JSON para hacerla más legible y cómo ordenar los resultados.
Format the Result
✨ Formateando el Resultado JSON
El Parámetro indent
: Indentación para Legibilidad
El parámetro indent
en las funciones json.dumps()
y
json.dump()
se utiliza para especificar el número de espacios a utilizar
para la indentación. Esto hace que la estructura del JSON sea mucho más fácil de leer
por humanos.
import json
datos = {
"nombre": "Ricardo",
"edad": 40,
"direccion": {
"calle": "Avenida Principal, 50",
"ciudad": "Valencia"
},
"hobbies": ["correr", "cocinar"],
"es_activo": True
}
# Sin indentación (formato compacto)
json_sin_indentar = json.dumps(datos)
print("JSON sin indentar:")
print(json_sin_indentar)
print("-" * 30)
# Con indentación de 4 espacios
json_indentado = json.dumps(datos, indent=4)
print("JSON con indentación de 4 espacios:")
print(json_indentado)
# También se puede usar un carácter diferente para la indentación, como un tabulador
json_indentado_tab = json.dumps(datos, indent='\t')
print("-" * 30)
print("JSON con indentación de tabulador:")
print(json_indentado_tab)
# Al escribir a un archivo, también se usa el parámetro indent
with open('datos_formateados.json', 'w') as archivo:
json.dump(datos, archivo, indent=2)
print("-" * 30)
print("Datos guardados en datos_formateados.json con indentación de 2 espacios.")
Como puedes ver, la salida con indentación es mucho más fácil de leer y entender, especialmente cuando los datos JSON tienen varios niveles de anidación.
Otros Parámetros de Formato:
separators
: Permite especificar los separadores utilizados en el JSON. Por defecto son(', ', ': ')
. Puedes modificarlos para obtener un formato más compacto (por ejemplo,(',', ':')
).sort_keys
: Si se establece enTrue
, los ключи de los diccionarios se ordenarán alfabéticamente en la salida JSON. Veremos esto en el siguiente tema.
Ejemplo con separators
:
import json
datos = {"manzana": 1, "banana": 2, "cereza": 3}
# Formato por defecto
json_default_separators = json.dumps(datos)
print(f"Por defecto: {json_default_separators}")
# Formato más compacto
json_compact_separators = json.dumps(datos, separators=(',', ':'))
print(f"Compacto: {json_compact_separators}")
El parámetro separators
puede ser útil si necesitas minimizar el tamaño del
archivo JSON.
Formatear la salida JSON es crucial para la legibilidad y el mantenimiento de tus
archivos y datos. El parámetro indent
es el más comúnmente utilizado para
este propósito.
En el siguiente tema, aprenderemos cómo ordenar los resultados JSON por clave.
Order the Result
🗝️ Ordenando el Resultado JSON
El Parámetro sort_keys
: Orden Alfabético de las Claves
El parámetro sort_keys
en las funciones json.dumps()
y
json.dump()
se utiliza para especificar si las claves de los diccionarios
deben ordenarse alfabéticamente en la salida JSON. Por defecto, su valor es
False
.
import json
datos_desordenados = {
"z": 10,
"a": 20,
"m": 30,
"b": 40
}
# Sin ordenar las claves (orden original del diccionario, que puede variar en Python < 3.7)
json_sin_ordenar = json.dumps(datos_desordenados)
print("JSON sin ordenar:")
print(json_sin_ordenar)
print("-" * 30)
# Ordenando las claves alfabéticamente
json_ordenado = json.dumps(datos_desordenados, sort_keys=True)
print("JSON con claves ordenadas:")
print(json_ordenado)
# También se puede combinar con la indentación
json_ordenado_indentado = json.dumps(datos_desordenados, sort_keys=True, indent=4)
print("-" * 30)
print("JSON con claves ordenadas e indentación:")
print(json_ordenado_indentado)
# Al escribir a un archivo, también se usa el parámetro sort_keys
with open('datos_ordenados.json', 'w') as archivo:
json.dump(datos_desordenados, archivo, sort_keys=True, indent=2)
print("-" * 30)
print("Datos guardados en datos_ordenados.json con claves ordenadas e indentación.")
Como puedes ver, al establecer sort_keys=True
, las claves del diccionario en
la salida JSON se ordenan alfabéticamente. Esto puede ser útil para facilitar la
comparación de archivos JSON o para mejorar la legibilidad en ciertos casos.
Consideraciones sobre el Orden:
- En Python 3.7 y posteriores, los diccionarios recuerdan el orden de inserción de los elementos. Sin embargo, al serializar a JSON, este orden no está garantizado a menos que se utilicen extensiones específicas o se ordene explícitamente.
- El parámetro
sort_keys=True
asegura un orden consistente basado en las claves, independientemente de la versión de Python o del orden de inserción original.
Ordenar las claves puede ser una práctica útil para la consistencia y la legibilidad en tus archivos y datos JSON.
Con esto, hemos cubierto los aspectos fundamentales para trabajar con JSON en Python. ¿Tienes alguna pregunta sobre el ordenamiento o sobre algún otro tema de JSON que hayamos visto?
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias