Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?

Wie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?

Linda Hamilton
Linda HamiltonOriginal
2024-12-29 18:42:12389Durchsuche

How Can I Serialize Decimal Objects to JSON in Python While Preserving Precision?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn