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!