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
Libérer: 2024-12-29 18:42:12
original
375 Les gens l'ont consulté

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'
Copier après la connexion

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'
Copier après la connexion

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'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal