JSON en Python
JSON (JavaScript Object Notation) es un formato de datos ligero que se utiliza para el intercambio de datos en aplicaciones web. Aunque se llama “JavaScript Object Notation”, JSON es independiente del lenguaje y se utiliza en muchos otros lenguajes de programación además de JavaScript.
En Python, puedes trabajar con JSON utilizando el módulo json
incorporado.
Convertir JSON a objeto de Python
Puedes convertir una cadena de texto JSON en un objeto de Python utilizando el método json.loads(). El siguiente ejemplo ilustra cómo se hace:
import json
# Ejemplo de cadena de texto JSON
json_str = '{"nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires"}'
# Convertir cadena de texto JSON a objeto de Python
python_obj = json.loads(json_str)
# Imprimir el objeto de Python
print(python_obj)
# Salida: {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Buenos Aires'}
Lenguaje del código: Python (python)
En este ejemplo, la cadena de texto JSON se almacena en la variable json_str
. Luego, utilizamos json.loads() para convertir la cadena de texto en un objeto de Python llamado python_obj
. El objeto python_obj
se puede manipular como cualquier otro objeto de Python.
Convertir objeto de Python a JSON
Puedes convertir un objeto de Python en una cadena de texto JSON utilizando el método json.dumps(). El siguiente ejemplo ilustra cómo se hace:
import json
# Objeto de Python
python_obj = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
# Convertir objeto de Python a cadena de texto JSON
json_str = json.dumps(python_obj)
# Imprimir la cadena de texto JSON
print(json_str)
# Salida: {"nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires"}
Lenguaje del código: Python (python)
En este ejemplo, el objeto de Python se almacena en la variable python_obj
. Luego, utilizamos json.dumps() para convertir el objeto de Python en una cadena de texto JSON llamada json_str
. La cadena de texto json_str
se puede utilizar como cualquier otra cadena de texto.
Lectura y escritura de archivos JSON
Puedes leer y escribir archivos JSON utilizando los métodos json.load() y json.dump(). El siguiente ejemplo ilustra cómo se hace:
import json
# Leer datos desde un archivo JSON
with open('datos.json') as f:
data = json.load(f)
# Imprimir los datos leídos desde el archivo
print(data)
# Modificar los datos
data['ciudad'] = 'Córdoba'
# Escribir los datos modificados en un archivo JSON
with open('datos_modificados.json', 'w') as f:
json.dump(data, f)
Lenguaje del código: Python (python)
En este ejemplo, utilizamos la función open() para abrir un archivo JSON llamado datos.json
. Luego, utilizamos json.load() para cargar los datos del archivo en un objeto de Python llamado data
.
Después, modificamos los datos en el objeto data
, y utilizamos json.dump() para escribir los datos modificados en un nuevo archivo JSON llamado datos_modificados.json
.
Usando argumentos adicionales con dumps y loads
Los métodos json.dumps() y json.loads() admiten argumentos adicionales para personalizar la conversión entre JSON y Python.
El argumento indent
de json.dumps() especifica el número de espacios para usar como sangría en la salida JSON. El argumento sort_keys
define si las claves deben ordenarse en la salida JSON.
El siguiente ejemplo ilustra cómo se utilizan estos argumentos:
import json
# Objeto de Python
python_obj = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
# Convertir objeto de Python a cadena de texto JSON con sangría y claves ordenadas
json_str = json.dumps(python_obj, indent=4, sort_keys=True)
# Imprimir la cadena de texto JSON
print(json_str)
# Salida:
# {
# "ciudad": "Buenos Aires",
# "edad": 30,
# "nombre": "Juan"
# }
Lenguaje del código: Python (python)
En este ejemplo, utilizamos los argumentos indent
y sort_keys
con json.dumps() para producir una salida JSON con sangría y claves ordenadas.
El argumento object_hook
de json.loads() especifica una función personalizada para decodificar un objeto JSON en un objeto Python.
El siguiente ejemplo ilustra cómo se utiliza este argumento:
import json
# Objeto de Python personalizado
class Persona:
def __init__(self, nombre, edad, ciudad):
self.nombre = nombre
self.edad = edad
self.ciudad = ciudad
# Función para decodificar un objeto JSON personalizado
def decode_persona(obj):
if '__class__' in obj and obj['__class__'] == 'Persona':
return Persona(obj['nombre'], obj['edad'], obj['ciudad'])
return obj
# Cadena de texto JSON personalizada
json_str = '{"__class__": "Persona", "nombre": "Juan", "edad": 30, "ciudad": "Buenos Aires"}'
# Convertir cadena de texto JSON personalizada a objeto de Python
python_obj = json.loads(json_str, object_hook=decode_persona)
# Imprimir el objeto de Python
print(python_obj)
# Salida: <__main__.Persona object at 0x7f960d16cc40>
Lenguaje del código: Python (python)
En este ejemplo, creamos una clase de Python personalizada llamada Persona
. Luego, definimos una función personalizada llamada decode_persona
que decodifica un objeto JSON personalizado en un objeto Persona
de Python.
Finalmente, utilizamos json.loads() con el argumento object_hook
para convertir la cadena de texto JSON personalizada en un objeto Persona
de Python utilizando nuestra función personalizada.
Dar formato al resultado
Para dar formato al resultado de la conversión entre JSON y Python, puedes utilizar el argumento indent
con el método json.dumps(). Este argumento especifica la cantidad de espacios que se deben utilizar para la sangría del resultado.
Por ejemplo, si tienes un objeto de Python y deseas imprimirlo con un formato JSON legible, puedes hacer lo siguiente:
import json
# Objeto de Python
datos = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
# Convertir el objeto de Python a una cadena de texto JSON con formato
json_str = json.dumps(datos, indent=4)
# Imprimir la cadena de texto JSON con formato
print(json_str)
Lenguaje del código: Python (python)
En este ejemplo, el argumento indent=4
se utiliza para especificar que se deben utilizar cuatro espacios para la sangría en la salida JSON. La salida de este código sería la siguiente:
{
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
Lenguaje del código: JSON / JSON con comentarios (json)
Como puedes ver, la salida JSON está formateada con una sangría clara y fácil de leer.
También puedes utilizar el método json.dumps() con el argumento sort_keys=True
para ordenar las claves en la salida JSON. Esto hace que sea más fácil comparar dos objetos JSON que contienen las mismas claves, incluso si las claves no están en el mismo orden. Por ejemplo:
import json
# Objeto de Python
datos = {
"nombre": "Juan",
"edad": 30,
"ciudad": "Buenos Aires"
}
# Convertir el objeto de Python a una cadena de texto JSON con claves ordenadas
json_str = json.dumps(datos, indent=4, sort_keys=True)
# Imprimir la cadena de texto JSON con claves ordenadas
print(json_str)
Lenguaje del código: Python (python)
La salida de este código sería la siguiente:
{
"ciudad": "Buenos Aires",
"edad": 30,
"nombre": "Juan"
}
Lenguaje del código: JSON / JSON con comentarios (json)
Como puedes ver, las claves en la salida JSON están ordenadas alfabéticamente.