Skip to main content

Documentación del Módulo JSON de Python

El módulo json en Python proporciona funciones para codificar y decodificar datos en formato JSON (JavaScript Object Notation). JSON es un formato de intercambio de datos ligero y fácil de leer, comúnmente utilizado para la comunicación entre aplicaciones web y para almacenar datos estructurados. A continuación, se detallan las principales funciones y conceptos del módulo json.

1. Codificación (Serialización) de Datos

a. json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

La función json.dumps() convierte un objeto de Python en una cadena de caracteres en formato JSON.

Parámetros Principales:

  • obj: Objeto de Python que se va a serializar.
  • skipkeys (opcional): Indica si deben omitirse las claves que no sean cadenas. El valor predeterminado es False.
  • ensure_ascii (opcional): Si es True, asegura que todos los caracteres no ASCII sean escapados como secuencias de escape ASCII. El valor predeterminado es True.
  • check_circular (opcional): Si es True, evita la serialización de objetos que formen estructuras cíclicas. El valor predeterminado es True.
  • allow_nan (opcional): Si es False, evita la serialización de valores NaN, Infinity e -Infinity. El valor predeterminado es True.
  • cls (opcional): Especifica una clase de codificador personalizada. Por defecto, usa JSONEncoder.
  • indent (opcional): Indentación aplicada a la salida JSON. Si es un número, especifica la cantidad de espacios; si es una cadena, se utiliza como carácter de indentación. El valor predeterminado es None.
  • separators (opcional): Tupla que especifica los separadores a utilizar. El valor predeterminado es (', ', ': ').
  • default (opcional): Función que se llama para objetos no serializables. Por defecto, genera un error si encuentra un objeto no serializable.
  • sort_keys (opcional): Si es True, ordena las claves en el resultado JSON. El valor predeterminado es False.

Ejemplo:

import json

datos = {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Ciudad A'}
cadena_json = json.dumps(datos, indent=2, ensure_ascii=False)
print(cadena_json)

b. json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

La función json.dump() es similar a json.dumps(), pero escribe la cadena JSON directamente en un objeto archivo (fp).

Parámetros Principales:

  • obj: Objeto de Python que se va a serializar.
  • fp: Objeto archivo donde se escribirá la cadena JSON.

Ejemplo:

import json

datos = {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Ciudad A'}
with open('archivo.json', 'w') as archivo_json:
json.dump(datos, archivo_json, indent=2, ensure_ascii=False)

2. Decodificación (Deserialización) de Datos

a. json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

La función json.loads() convierte una cadena de caracteres en formato JSON en un objeto de Python.

Parámetros Principales:

  • s: Cadena de caracteres en formato JSON.
  • cls (opcional): Especifica una clase de decodificador personalizada. Por defecto, usa JSONDecoder.
  • object_hook (opcional): Función que se llama para cada objeto diccionario en la cadena JSON. Puede utilizarse para modificar la estructura resultante.
  • parse_float (opcional): Función que se llama para convertir valores de punto flotante. Por defecto, utiliza float().
  • parse_int (opcional): Función que se llama para convertir valores enteros. Por defecto, utiliza int().
  • parse_constant (opcional): Función que se llama para interpretar constantes JSON como null, true y false. Por defecto, utiliza None.
  • object_pairs_hook (opcional): Función que se llama para convertir pares de clave-valor de objetos JSON en diccionarios. Por defecto, utiliza None.

Ejemplo:

import json

cadena_json = '{"nombre": "Juan", "edad": 30, "ciudad": "Ciudad A"}'
datos = json.loads(cadena_json)
print(datos)

b. `json.load(fp, *, cls=None, object_hook=None

, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)`

La función json.load() es similar a json.loads(), pero lee la cadena JSON directamente desde un objeto archivo (fp).

Parámetros Principales:

  • fp: Objeto archivo del que se leerá la cadena JSON.

Ejemplo:

import json

with open('archivo.json', 'r') as archivo_json:
datos = json.load(archivo_json)
print(datos)

3. Manipulación de Objetos JSON

a. json.JSONEncoder

La clase JSONEncoder permite definir clases personalizadas para codificar objetos en formato JSON. Se puede heredar de esta clase y sobrescribir el método default() para manejar tipos de datos no serializables de forma personalizada.

Ejemplo:

import json

class PersonaEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Persona):
return obj.__dict__
return super().default(obj)

class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad

persona = Persona('Juan', 30)

cadena_json = json.dumps(persona, cls=PersonaEncoder)
print(cadena_json)

b. json.JSONDecoder

La clase JSONDecoder permite definir clases personalizadas para decodificar objetos desde formato JSON. Se puede heredar de esta clase y sobrescribir el método object_hook() para manejar la construcción de objetos desde la cadena JSON.

Ejemplo:

import json

class PersonaDecoder(json.JSONDecoder):
def object_hook(self, dct):
if 'nombre' in dct and 'edad' in dct:
return Persona(dct['nombre'], dct['edad'])
return dct

class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad

cadena_json = '{"nombre": "Juan", "edad": 30}'
persona = json.loads(cadena_json, cls=PersonaDecoder)
print(persona.nombre, persona.edad)

4. Operaciones Adicionales

a. Formato Compacto vs. Formato Legible

Al codificar un objeto en JSON, el parámetro indent de las funciones json.dumps() y json.dump() se utiliza para controlar el formato del resultado. Un valor de None o 0 genera una cadena JSON en formato compacto, mientras que un valor mayor a 0 agrega indentación para hacerlo más legible.

b. Sorteo de Claves

Al codificar un diccionario en JSON, el parámetro sort_keys de las funciones json.dumps() y json.dump() se utiliza para ordenar las claves del diccionario en el resultado JSON. Esto puede ser útil para mantener un orden consistente en la salida.

c. Uso con Tipos de Datos Personalizados

Para trabajar con tipos de datos personalizados, se puede proporcionar una función default o object_hook que permita la serialización y deserialización personalizada.

Conclusión

El módulo json de Python proporciona una interfaz sencilla y poderosa para trabajar con datos en formato JSON. Ya sea codificando datos de Python en JSON o decodificando datos JSON en objetos de Python, este módulo facilita la manipulación de datos estructurados en aplicaciones y servicios web. Además, la flexibilidad para personalizar la serialización y deserialización hace que el módulo json sea altamente versátil.

Documentación del Módulo JSON de Python

El módulo json en Python proporciona funciones para trabajar con datos en formato JSON (JavaScript Object Notation). JSON es un formato de intercambio de datos ampliamente utilizado debido a su simplicidad y fácil lectura por humanos. Este módulo permite la codificación y decodificación de datos JSON en Python.

1. Codificación (Serialización) de Datos JSON

a. json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Esta función convierte un objeto de Python a una cadena JSON.

Parámetros:

  • obj: El objeto de Python a ser codificado.
  • skipkeys (opcional): Si es True, las claves no válidas en el objeto Python se omiten en lugar de generar un error.
  • ensure_ascii (opcional): Si es False, los caracteres no ASCII en la cadena resultante se mantienen sin modificar.
  • check_circular (opcional): Si es False, desactiva la comprobación de referencias circulares.
  • allow_nan (opcional): Si es False, genera un ValueError si el objeto contiene NaN, Infinity o -Infinity.
  • cls (opcional): Un objeto codificador personalizado.
  • indent (opcional): Especifica la cantidad de espacio en blanco que se utilizará para la indentación.
  • separators (opcional): Especifica los separadores que se utilizarán entre los elementos.
  • default (opcional): Una función que se llama para objetos no serializables.
  • sort_keys (opcional): Si es True, las claves del diccionario se ordenan antes de la codificación.

Ejemplo:

import json

datos = {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Ciudad A'}
json_str = json.dumps(datos, indent=2, ensure_ascii=False)
print(json_str)

b. json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Esta función es similar a json.dumps, pero escribe directamente en un objeto de archivo (o similar).

Parámetros:

  • obj: El objeto de Python a ser codificado.
  • fp: Un objeto de archivo (o similar) donde se escribirá la cadena JSON.
  • Los demás parámetros son los mismos que los de json.dumps.

Ejemplo:

import json

datos = {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Ciudad A'}
with open('archivo.json', 'w') as archivo_json:
json.dump(datos, archivo_json, indent=2, ensure_ascii=False)

2. Decodificación (Deserialización) de Datos JSON

a. json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

Esta función convierte una cadena JSON en un objeto de Python.

Parámetros:

  • s: La cadena JSON a ser decodificada.
  • cls (opcional): Un objeto decodificador personalizado.
  • object_hook (opcional): Una función que se llama para cada objeto dict.
  • parse_float (opcional): Una función que se llama para cada número float.
  • parse_int (opcional): Una función que se llama para cada número int.
  • parse_constant (opcional): Una función que se llama para cada constante en JSON (Infinity, NaN, -Infinity).
  • object_pairs_hook (opcional): Una función que se llama para cada par (clave, valor) dict.
  • kw: Otros parámetros de configuración.

Ejemplo:

import json

json_str = '{"nombre": "Juan", "edad": 30, "ciudad": "Ciudad A"}'
datos = json.loads(json_str)
print(datos)

b. json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

Esta función es similar a json.loads, pero lee directamente desde un objeto de archivo (o similar).

Parámetros:

  • fp: Un objeto de archivo (o similar) desde donde se leerá la cadena JSON.
  • Los demás parámetros son los mismos que los de json.loads.

Ejemplo:

import json

with open('archivo.json', 'r') as archivo_json:
datos = json.load(archivo_json)
print(datos)

3. Ejemplo Completo de Uso del Módulo JSON

import json

# Codificación de datos
datos = {'nombre': 'Juan', 'edad': 30, 'ciudad': 'Ciudad A'}
json_str = json.dumps(datos, indent=2,