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