Python LanguageModulo JSON


Osservazioni

Per la documentazione completa inclusa la funzionalità specifica della versione, consultare la documentazione ufficiale .

tipi

Defaults

il modulo json gestirà la codifica e la decodifica dei seguenti tipi di default:

Tipi di serializzazione:

JSON Pitone
oggetto dict
schieramento elenco
stringa str
numero (int) int
numero (reale) galleggiante
vero falso Vero falso
nullo Nessuna

Il modulo json comprende anche NaN , Infinity e -Infinity come valori float corrispondenti, che è al di fuori della specifica JSON.

Tipi di serializzazione:

Pitone JSON
dict oggetto
lista, tupla schieramento
str stringa
int, float, (int / float) -derived Enums numero
Vero vero
falso falso
Nessuna nullo

Per disabilitare la codifica di NaN , Infinity e -Infinity devi codificare con allow_nan=False . Ciò solleverà ValueError se ValueError di codificare questi valori.

Serializzazione personalizzata (de-)

Esistono vari hook che consentono di gestire i dati che devono essere rappresentati in modo diverso. L'uso di functools.partial consente di applicare parzialmente i parametri rilevanti a queste funzioni per comodità.

serializzazione:

È possibile fornire una funzione che opera sugli oggetti prima di essere serializzati in questo modo:

# 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-serializzazione:

Ci sono vari hook che sono gestiti dalle funzioni JSON, come object_hook e parse_float. Per un elenco completo per la tua versione di Python, vedi qui .

# 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)

Ulteriori personalizzazioni (de-) serializzazione:

Il modulo json consente anche l'estensione / sostituzione di json.JSONEncoder e json.JSONDecoder per gestire vari tipi. Gli hook documentati sopra possono essere aggiunti come predefiniti creando un metodo con un nome equivalente. Per utilizzarli basta passare la classe come parametro cls alla funzione rilevante. L'uso di functools.partial consente di applicare parzialmente il parametro cls a queste funzioni per comodità, ad es

# 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)

Modulo JSON Esempi correlati