如何重寫使用marshmallow庫中的JSON編碼器,以便它可以序列化Decimal
場,我想我可以通過在基地Schema
或Meta
類中重寫json_module
做到這一點,但我不知道如何:如何在棉花糖中設置JSON編碼器? ?
https://github.com/marshmallow-code/marshmallow/blob/dev/marshmallow/schema.py#L194
我拖走了所有的文檔並閱讀代碼,但我不是Python本機。
如何重寫使用marshmallow庫中的JSON編碼器,以便它可以序列化Decimal
場,我想我可以通過在基地Schema
或Meta
類中重寫json_module
做到這一點,但我不知道如何:如何在棉花糖中設置JSON編碼器? ?
https://github.com/marshmallow-code/marshmallow/blob/dev/marshmallow/schema.py#L194
我拖走了所有的文檔並閱讀代碼,但我不是Python本機。
我認爲解決方案是使用marshmallow.fields.Decimal
與as_string=True
:
此字段序列化爲一個
decimal.Decimal
對象默認。如果 需要將數據呈現爲JSON,請記住標準庫中的json
模塊 不會編碼decimal.Decimal
。因此, 必須使用可處理小數的JSON庫,例如simplejson
,或者通過傳遞as_string=True
將其串行化爲字符串。
如果你想序列化Decimal
場(和保持價值爲數字),您可以覆蓋其dumps()
呼叫使用棉花糖使用simplejson
而不是默認的JSON模塊。
爲此,只需將class Meta
定義添加到您的模式,併爲此類指定json_module
屬性。
實施例: ``` 進口simplejson
類MYSCHEMA(架構): 量= fields.Decimal()
class Meta:
json_module = simplejson
```
然後,序列化: my_schema = MySchema() my_schema.dumps(my_object)
我有同樣的問題,我最終改變在Schema上的字段爲字符串。在我的情況下,因爲我只會用json返回它,如果它是字符串或小數,它真的沒關係。
from marshmallow_sqlalchemy import ModelSchema
from marshmallow import fields
class CurrencyValueSchema(ModelSchema):
class Meta:
model = CurrencyValue
value = fields.String()
我返回的JSON:
{
"currency_values": [
{
"id": 9,
"timestamp": "2016-11-18T23:59:59+00:00",
"value": "0.944304"
},
{
"id": 10,
"timestamp": "2016-11-18T23:59:59+00:00",
"value": "3.392204"
},
}
需要注意的是,如果你使用'as_string = TRUE'選項,將您的數字值轉換爲字符串,這可能不是你想要的行爲。 –