如何在棉花糖中设置JSON编码器?

问题描述 投票:3回答:3

如何覆盖使用marshmallow库的JSON编码器,以便它可以序列化Decimal字段?我想我可以通过覆盖基本json_moduleSchema类中的Meta来做到这一点,但我不知道如何:

https://github.com/marshmallow-code/marshmallow/blob/dev/marshmallow/schema.py#L194

我搜索了所有文档并阅读了代码,但我不是Python本机。

python json
3个回答
6
投票

如果要序列化Decimal字段(并将值保留为数字),可以覆盖Marshmallow在其dumps()调用中使用的默认json模块,以使用simplejson

为此,只需将class Meta定义添加到模式中,并为此类指定json_module属性。

例:

import simplejson

class MySchema(Schema):
    amount = fields.Decimal()

    class Meta:
        json_module = simplejson

然后,序列化:

my_schema = MySchema()
my_schema.dumps(my_object)

0
投票

我认为解决方案是使用marshmallow.fields.Decimalas_string=True

默认情况下,此字段序列化为decimal.Decimal对象。如果需要将数据呈现为JSON,请记住标准库中的json模块不对decimal.Decimal进行编码。因此,您必须使用可以处理小数的JSON库,例如simplejson,或通过传递as_string=True序列化为字符串。


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"
   }, 
}
© www.soinside.com 2019 - 2024. All rights reserved.