Python LanguageMódulo JSON


Observaciones

Para obtener la documentación completa, incluida la funcionalidad específica de la versión, consulte la documentación oficial .

Los tipos

Valores predeterminados

El módulo json manejará la codificación y decodificación de los siguientes tipos de manera predeterminada:

Tipos de serialización:

JSON Pitón
objeto dictado
formación lista
cuerda str
número (int) En t
numero (real) flotador
verdadero Falso Verdadero Falso
nulo Ninguna

El módulo json también entiende NaN , Infinity e -Infinity como sus valores flotantes correspondientes, que están fuera de la especificación JSON.

Tipos de serialización:

Pitón JSON
dictado objeto
lista, tupla formación
str cuerda
Enums, float, (int / float) -derived número
Cierto cierto
Falso falso
Ninguna nulo

Para no permitir la codificación de NaN , Infinity e -Infinity , debe codificar con allow_nan=False . Esto generará un ValueError si intenta codificar estos valores.

Personalización (des) serialización

Existen varios enlaces que le permiten manejar datos que deben representarse de manera diferente. El uso de functools.partial permite aplicar parcialmente los parámetros relevantes a estas funciones para su comodidad.

Publicación por entregas:

Puede proporcionar una función que opere en objetos antes de que se serialicen así:

# my_json module

import json
from functools import partial

def serialise_object(obj):
    # Do something to produce json-serialisable data
    return dict_obj

dump = partial(json.dump, default=serialise_object)
dumps = partial(json.dumps, default=serialise_object)

De serialización:

Hay varios enlaces que son manejados por las funciones json, como object_hook y parse_float. Para obtener una lista exhaustiva de su versión de python, consulte aquí .

# my_json module

import json
from functools import partial

def deserialise_object(dict_obj):
    # Do something custom
    return obj

def deserialise_float(str_obj):
    # Do something custom
    return obj

load = partial(json.load, object_hook=deserialise_object, parse_float=deserialise_float)
loads = partial(json.loads, object_hook=deserialise_object, parse_float=deserialise_float)

Mayor (des) serialización personalizada:

El módulo json también permite la extensión / sustitución de json.JSONEncoder y json.JSONDecoder para manejar varios tipos. Los ganchos documentados anteriormente se pueden agregar como valores predeterminados creando un método de nombre equivalente. Para usarlos, simplemente pase la clase como el parámetro cls a la función relevante. El uso de functools.partial permite aplicar parcialmente el parámetro cls a estas funciones por conveniencia, por ejemplo,

# my_json module

import json
from functools import partial

class MyEncoder(json.JSONEncoder):
    # Do something custom

class MyDecoder(json.JSONDecoder):
    # Do something custom

dump = partial(json.dump, cls=MyEncoder)
dumps = partial(json.dumps, cls=MyEncoder)
load = partial(json.load, cls=MyDecoder)
loads = partial(json.loads, cls=MyDecoder)

Módulo JSON Ejemplos relacionados