[解決済み】PythonのJSONでDecimalオブジェクトをシリアライズする
2022-01-28 07:56:12
質問
を持っています。
Decimal('3.9')
をオブジェクトの一部としてエンコードし、次のようなJSON文字列にしたい。
{'x': 3.9}
. クライアント側では精度を気にしないので、floatでいいんです。
これをシリアライズする良い方法はないでしょうか?JSONDecoderはDecimalオブジェクトを受け付けないし、あらかじめfloatに変換しておくと、次のような結果になります。
{'x': 3.8999999999999999}
これは間違っており、帯域幅の大きな無駄となります。
解決方法は?
サブクラス化するのはどうでしょう
json.JSONEncoder
?
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
# wanted a simple yield str(o) in the next line,
# but that would mean a yield on the line with super(...),
# which wouldn't work (see my comment below), so...
return (str(o) for o in [o])
return super(DecimalEncoder, self).default(o)
そして、このように使用します。
json.dumps({'x': decimal.Decimal('5.5')}, cls=DecimalEncoder)
関連
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
python call matlab メソッドの詳細
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法