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.
Python 3 no podría ser la excepción, por ello es que hoy veremos cómo:
- Codificar diccionarios, listas, enteros, flotantes, etcétera con Python 3 y JSON
- Imprimir el JSON codificado o escribirlo en un archivo
- Decodificar una cadena de JSON
- 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:
- En Windows
- En Linux Ubuntu
- En Android
- Online
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.