2016-03-09 50 views

回答

0

我認爲解決方案是使用marshmallow.fields.Decimalas_string=True

此字段序列化爲一個decimal.Decimal對象默認。如果 需要將數據呈現爲JSON,請記住標準庫中的json模塊 不會編碼decimal.Decimal。因此, 必須使用可處理小數的JSON庫,例如 simplejson,或者通過傳遞as_string=True將其串行化爲字符串。

+1

需要注意的是,如果你使用'as_string = TRUE'選項,將您的數字值轉換爲字符串,這可能不是你想要的行爲。 –

2

如果你想序列化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)

0

我有同樣的問題,我最終改變在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" 
    }, 
}