Maison >développement back-end >Tutoriel Python >Comment puis-je sérialiser des objets décimaux en JSON en Python tout en préservant la précision ?

Comment puis-je sérialiser des objets décimaux en JSON en Python tout en préservant la précision ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 18:42:12385parcourir

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

Sérialisation d'objets décimaux en JSON en Python

Un problème courant survient lors de la tentative d'encodage d'un objet décimal dans une chaîne JSON, en préservant sa précision . L'approche par défaut de conversion en float entraîne une perte de précision.

Solution 1 : SimpleJSON (Python 2.1 et supérieur)

SimpleJSON fournit une prise en charge intuitive des objets décimaux via son indicateur 'use_decimal' :

import simplejson as json

json.dumps(Decimal('3.9'), use_decimal=True)
# Output: '3.9'

Par défaut, 'use_decimal' est défini sur True, éliminant ainsi le besoin de spécification explicite :

json.dumps(Decimal('3.9'))
# Output: '3.9'

Solution 2 : Encodeur JSON personnalisé

Si SimpleJSON n'est pas une option, vous peut créer un encodeur JSON personnalisé qui gère les objets Decimal :

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'

Notez que cette approche convertira le Objet décimal à un flottant, entraînant potentiellement une perte de précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn