Python LanguageJSON-Modul


Bemerkungen

Die vollständige Dokumentation einschließlich versionsspezifischer Funktionen finden Sie in der offiziellen Dokumentation .

Typen

Standardwerte

Das json Modul übernimmt standardmäßig das Kodieren und Dekodieren der folgenden Typen:

Deserialisierungsarten:

JSON Python
Objekt diktieren
Array Liste
Schnur str
Nummer (int) int
Nummer (real) schweben
wahr falsch Wahr falsch
Null Keiner

Das json Modul versteht auch NaN , Infinity und -Infinity als ihre entsprechenden Float-Werte, was außerhalb der JSON-Spezifikation liegt.

Serialisierungsarten:

Python JSON
diktieren Objekt
Liste, Tupel Array
str Schnur
int, float, (int / float) abgeleitete Enums Nummer
Wahr wahr
Falsch falsch
Keiner Null

Um die Kodierung von NaN , Infinity und -Infinity , müssen Sie mit allow_nan=False kodieren. Dadurch wird ein ValueError wenn Sie versuchen, diese Werte zu kodieren.

Kundenspezifische (De-) Serialisierung

Es gibt verschiedene Hooks, mit denen Sie mit Daten umgehen können, die unterschiedlich dargestellt werden müssen. Die Verwendung von functools.partial ermöglicht es Ihnen, die relevanten Parameter aus praktischen functools.partial teilweise auf diese Funktionen anzuwenden.

Serialisierung:

Sie können eine Funktion bereitstellen, die Objekte bearbeitet, bevor sie wie folgt serialisiert werden:

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

Es gibt verschiedene Hooks, die von den Json-Funktionen behandelt werden, z. B. object_hook und parse_float. Eine vollständige Liste Ihrer Python-Version finden Sie hier .

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

Weitere benutzerdefinierte (De) Serialisierung:

Das json Modul ermöglicht auch die Erweiterung / Ersetzung des json.JSONEncoder und des json.JSONDecoder , um verschiedene Typen zu behandeln. Die oben dokumentierten Hooks können als Standardwerte hinzugefügt werden, indem eine gleichnamige Methode erstellt wird. Um diese zu verwenden, übergeben Sie die Klasse einfach als cls Parameter an die entsprechende Funktion. Die Verwendung von functools.partial ermöglicht es Ihnen, den cls-Parameter zur Vereinfachung auf diese Funktionen anzuwenden, z

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

JSON-Modul Verwandte Beispiele