python

JSON y Python: codificar y decodificar

JSON se ha convertido en un estándar para el intercambio de datos, sobre todo en la web, pero también funciona en otras plataformas.

Debido a su flexibilidad y simplicidad está presente en la mayoría de lenguajes de programación.

Trabajar con JSON en Python 3

Python 3 no podría ser la excepción, por ello es que hoy veremos cómo:

  1. Codificar diccionarios, listas, enteros, flotantes, etcétera con Python 3 y JSON
  2. Imprimir el JSON codificado o escribirlo en un archivo
  3. Decodificar una cadena de JSON
  4. Leer un archivo JSON y decodificarlo

Todo ello únicamente usando el módulo de json en Python 3, el cual ya viene incluido por defecto.

Instalar Python 3

Recuerda instalar Python de acuerdo a la plataforma que más te guste:

Codificar JSON con Python

Para codificar un dato a su representación JSON importamos el módulo json y llamamos a json.dumps (dumps porque es dump string, es decir, una simple cadena), lo cual devuelve una cadena.

El método json.dumps recibe (en su forma más simple) un argumento de cualquier tipo; puede ser una cadena, un diccionario, una lista; una lista de diccionarios, un diccionario con números, un diccionario con listas, etcétera.

En el código que aparece a continuación podemos ver múltiples ejemplos de codificación con JSON en Python:

"""
 Ejemplos de codificación de listas, diccionarios, enteros, etcétera 
 a JSON usando Python 3

 @author parzibyte
"""
import json
# Para codificar usamos json.dumps; podemos codificar todo tipo de dato
# Cadena
cadena = "Hola mundo"
cadena_codificada = json.dumps(cadena)
print(cadena_codificada)
# Entero
entero = 21
entero_codificado = json.dumps(entero)
print(entero_codificado)
""" Lo mismo para booleanos, flotantes, etcétera"""

# Listas
lista = ["Let me go", "Shattered", "Miss you"]
lista_codificada = json.dumps(lista)
print(lista_codificada)
# Objetos (diccionarios)
diccionario = {
    "titulo": "La rebelión de Atlas",
    "autor": "Ayn Rand",
    "publicacion": 1957,
}
diccionario_codificado = json.dumps(diccionario)
print(diccionario_codificado)
# Listas de diccionarios
videojuegos = [
    {
        "nombre": "Super Mario Bros 3",
        "consola": "NES",
    },
    {
        "nombre": "Halo Combat Evolved",
        "consola": "Xbox",
    },
    {
        "nombre": "Crash Team Racing",
        "consola": "PSX",
    },
]
videojuegos_codificados = json.dumps(videojuegos)
print(videojuegos_codificados)
# Diccionario con listas
diccionario = {
    "numeros": [1, 2, 3, 4],
    "cadenas": ["Hola", "bla bla", "Henlo"]
}
diccionario_codificado = json.dumps(diccionario)
print(diccionario_codificado)

Ahora podemos enviar la cadena, guardarla, imprimirla, etcétera.

Escribir a archivo JSON con Python

El módulo json en Python proporciona el método json.dump (sin s al final) que recibe el manejador de un archivo y la cadena JSON a escribir.

Antes de llamarlo hay que abrir un archivo (en donde se guardan los datos) en modo escritura, y dentro llamar a json.dump.

"""
 Ejemplos de codificación de datos a JSON con Python
 y escritura de los mismos en un archivo

 @author parzibyte
"""
import json
# Para codificar y escribir directamente usamos json.dump; podemos codificar todo tipo de dato

# Listas de diccionarios
videojuegos = [
 {
  "nombre": "Super Mario Bros 3",
  "consola": "NES",
 },
 {
  "nombre": "Halo Combat Evolved",
  "consola": "Xbox",
 },
 {
  "nombre": "Crash Team Racing",
  "consola": "PSX",
 },
]
# ¿Quieres escribirlo a un archivo? fácil:
with open("videojuegos.json", "w") as archivo:
 json.dump(videojuegos, archivo)

Podemos apreciar que no es necesario codificar a JSON con json.dumps; y que solamente se llama a json.dump pasando el nombre del archivo y el nombre de la variable.

Decodificar cadena JSON con Python

Ahora veamos cómo parsear una cadena JSON en Python; esta cadena podría venir del consumo de una API o de cualquier otro lugar.

Para decodificar una cadena usamos json.loads, que lee una cadena y devuelve un tipo de dato “no definido”.

Es decir, devuelve lo que tenga la cadena JSON. Si la cadena tiene una lista devuelve una lista, si tiene un diccionario devuelve un diccionario, etcétera.

Cuando encuentra datos anidados (diccionarios dentro de diccionarios, diccionarios dentro de listas, etcétera) decodifica todos, es decir, no se detiene en el primer nivel.

"""
 Ejemplo de parseo de una cadena JSON a un tipo
 nativo en Python 3

 @author parzibyte
"""
import json
"""Los datos pueden venir de cualquier lugar: de la web, 
de un archivo, de una cadena, etcétera"""
# Decodificar una cadena
cadena_json = """[{"nombre": "Super Mario Bros 3", "consola": "NES"}, {"nombre": "Halo Combat Evolved", "consola": "Xbox"}, {"nombre": "Crash Team Racing", "consola": "PSX"}]"""
lista_de_videojuegos = json.loads(cadena_json)
for videojuego in lista_de_videojuegos:
 # Puedes usar get...
 nombre = videojuego.get("nombre")
 print(nombre)
 # o videojuego["indice"]
 consola = videojuego["consola"]
 print(consola)

# Otro ejemplo de cadena
cadena_json = """{"titulo": "La rebeli\u00f3n de Atlas", "autor": "Ayn Rand", "publicacion": 1957}"""
libro = json.loads(cadena_json)
# Ahora es un diccionario 
print(libro["titulo"])
print(libro["autor"])
print(libro["publicacion"])

Leer y parsear contenido de un archivo JSON con Python

Para decodificar el contenido de un archivo JSON se utiliza el método json.load.

Similar a los métodos anteriores este recibe un manejador de archivo que debemos abrir en modo lectura; y devuelve el JSON decodificado.

Es decir, no lee una cadena, lee el archivo. No hay que confundir json.load con json.loads.

{
    "dbname": "tienda",
    "user": "postgres",
    "password": "hunter2",
    "host": "localhost",
    "port": 5432
}
"""
 Ejemplo de parseo de un archivo JSON a un tipo
 nativo en Python 3
 
 @author parzibyte
"""
import json
with open("credenciales.json") as archivo_credenciales:
 credenciales = json.load(archivo_credenciales)
# Usa get o diccionario["indice"]
nombre_bd = credenciales.get("dbname")
print(nombre_bd)
puerto = credenciales.get("port")
print(puerto)
password = credenciales.get("password")
print(password)

Dentro del archivo JSON hay un diccionario simple, pero podría estar cualquier cadena JSON válida. Abrimos el archivo y leemos con json.load; después de ello podemos usar la variable como un tipo nativo dentro de Python.

Conclusión

En este tutorial vimos cómo trabajar con JSON y Python 3. Codificamos y decodificamos; tanto a cadenas como a archivos.

Recuerda que el JSON puede enviarse y recibirse por distintos medios, la parte crucial es decodificarlo y codificarlo.

En caso de que quieras más tutoriales de Python haz click aquí.

Como referencia dejo un enlace a la documentación oficial.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.