Wenn DynamoDB beispielsweise int / float-ähnliche numerische Daten verarbeitet, werden die Daten als Dezimalzahl abgerufen. Wenn ich Pythons Standard json.dumps für Abfragen ausführe und Elemente erhalte, die diese Art von Daten enthalten, erhalte ich aufgrund des Typs, der nicht konvertiert werden kann, eine Ausnahme. Also vergesse ich immer, wie ich damit umgehen soll, also werde ich eine Notiz hinterlassen. (Ähnliches und ähnliches passiert mit dem Datetime-Typ) Wenn json.dumps mit einem Typfehler fehlschlägt, können Sie dies beheben, indem Sie eine Konvertierungsfunktion bereitstellen.
Sie können Standard als Argument für json.dumps angeben. Wenn Sie hier eine Konvertierungsfunktion festlegen, können Sie den Nichtzieltyp selbst behandeln und in Ihren Lieblingstyp konvertieren. Auszug aus dem unten stehenden Beamten
Wenn Sie> default angeben, geben Sie eine Funktion an. Diese Funktion wird für Objekte aufgerufen, die ansonsten nicht serialisiert werden können. Die Funktion muss das Objekt in einer JSON-codierten Version zurückgeben oder einen TypeError auslösen. Wenn nicht angegeben, wird TypeError ausgelöst.
Bereiten Sie eine Konvertierungsfunktion vor.
from decimal import Decimal
def decimal_to_int(obj):
if isinstance(obj, Decimal):
return int(obj)
Beim Ausführen von json.dump
json.dumps(your_val, default=decimal_to_int)
Legen Sie einfach die Konvertierungsfunktion im Standardargument fest.
Dieses Mal habe ich nur geschrieben, um Dezimalzahlen zu konvertieren. Wenn Sie jedoch die für die Typkonvertierungsfunktion erwartete Typprüfung und Konvertierungslogik vorbereiten, können mehrere Typen unterstützt werden. Beispielsweise wird datetime als mit strftime formatierte Zeichenfolge zurückgegeben. Es wäre also nützlich, wenn Sie die Struktur der Funktionen verstehen könnten, die Sie für selbstverständlich halten. Wenn Sie es richtig verstehen möchten, überprüfen Sie bitte hier.
Es ist ein sehr kurzer Artikel, aber ich vergesse ihn immer, also ist es fast mein eigenes Memo.
simplejson scheint viele Typen zu unterstützen. Ich habe es nie benutzt. Wenn Sie es mit AWS Lambda verwenden möchten, ist es nicht im Standardpaket enthalten. Fügen Sie es daher selbst zum Paket hinzu (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package). Sie müssen sich als [html] oder Lambda Layer registrieren.
Recommended Posts