Python で Decimal オブジェクトを JSON にシリアル化する
精度を維持しながら Decimal オブジェクトを JSON 文字列にエンコードしようとすると、一般的な問題が発生します。 float に変換するデフォルトのアプローチでは、精度が失われます。
解決策 1: SimpleJSON (Python 2.1 以降)
SimpleJSON は、次の方法で Decimal オブジェクトを直感的にサポートします。 「use_decmal」フラグ:
import simplejson as json json.dumps(Decimal('3.9'), use_decimal=True) # Output: '3.9'
デフォルトでは、 「use_decmal」が True に設定されているため、明示的な指定は不要です。
json.dumps(Decimal('3.9')) # Output: '3.9'
解決策 2: カスタム JSON エンコーダー
SimpleJSON がオプションでない場合は、 Decimal オブジェクトを処理するカスタム JSON エンコーダを作成できます:
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'
このアプローチでは Decimal オブジェクトが float に変換され、精度が失われる可能性があります。
以上がPython で精度を維持しながら 10 進数オブジェクトを JSON にシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。