Dezimalobjekte in JSON in Python serialisieren
Ein häufiges Problem tritt auf, wenn versucht wird, ein Dezimalobjekt in eine JSON-Zeichenfolge zu kodieren und dabei seine Präzision beizubehalten . Der Standardansatz der Konvertierung in eine Gleitkommazahl führt zu einem Präzisionsverlust.
Lösung 1: SimpleJSON (Python 2.1 und höher)
SimpleJSON bietet intuitive Unterstützung für Decimal-Objekte durch sein Flag „use_decimal“:
import simplejson as json json.dumps(Decimal('3.9'), use_decimal=True) # Output: '3.9'
Standardmäßig ist „use_decimal“ gesetzt auf True, sodass keine explizite Angabe erforderlich ist:
json.dumps(Decimal('3.9')) # Output: '3.9'
Lösung 2: Benutzerdefinierter JSON-Encoder
Wenn SimpleJSON keine Option ist, können Sie ein benutzerdefiniertes JSON erstellen Encoder, der Decimal-Objekte verarbeitet:
import decimal import json class DecimalEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, decimal.Decimal): return float(obj) # Handle other object types as needed return super().default(obj) json.dumps(Decimal('3.9'), cls=DecimalEncoder) # Output: '3.8999999999999999'
Beachten Sie, dass dieser Ansatz das Decimal-Objekt in eine Gleitkommazahl umwandelt, was möglicherweise zu Präzision führt Verlust.
Das obige ist der detaillierte Inhalt vonWie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!