我正在 Django 中制作一個小型 API 服務器。對于我的一個欄位,我使用了一個十進制欄位,它負責表示美元值,所以我希望始終保留 2 個小數位。但我正在努力獲得確切的格式。
我正在使用 rest_framework 并且我的基本級別回應被編碼為具有以下序列化程式的字串:
price = serializers.DecimalField(max_digits=10, decimal_places=2, required=True)
字串表示
有一個選項可以使用“COERCE_DECIMAL_TO_STRING”關閉字串強制: settings.py 中的 False,但隨后我遇到了一個問題,即 Decimal 不是 JSON 可序列化的,并且必須使用 FloatField 我無法指定格式并最終只有 1小數位:
price = serializers.FloatField(required=True)
浮點表示
我搜索了在序列化程式上設定 FloatField 格式,但沒有找到任何相關選項。我相信我也嘗試了其他一些像這樣的序列化程式并沒有達到目標,即:
如何在 Django 中對 API 回應強制保留 2 位小數?
uj5u.com熱心網友回復:
json 不支持小數,因此格式化浮點數是唯一的解決方案。您需要使用自定義 json 編碼器,為 json 回應指定浮點格式,并且從 api 回傳格式化的 json。
您的編碼器可能如下所示:
# Encode Floats as "decimal" with two decimal places
class DecimalEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, dict):
result = '{'
for key, value in obj.items():
if isinstance(value, float):
encoded_value = format(value, '.2f')
else:
encoded_value = json.JSONEncoder.encode(self, value)
result = f'"{key}": {encoded_value}, '
result = result[:-2] '}'
return result
return json.JSONEncoder.encode(self, obj)
參考:https ://www.geeksforgeeks.org/json-data-types/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442685.html
上一篇:決議雙嵌套JSON-Volley
