如何使棉花糖(> = 3.0)将fields.Dict()中的数字视为小数

时间:2019-06-10 08:20:24

标签: python-3.x amazon-dynamodb marshmallow

我有一个JSON API,其中的一个字段定义为fields.Dict-数据可以包含有效的JSON,其内容由用户决定。

但是,现在存在一个问题,用户不能使用Decimals(需要将它们存储为字符串),因为存储后端(DynamoDB)仅支持Decimal不支持float-并传递{{1 }}无效,因为棉花糖会反序列化。

如何强制棉花糖将所有json.loads(... parse_float=Decimal)中带有.的数字(递归)视为fields.Dict或强制棉花糖始终传递Decimal参数JSON加载?

1 个答案:

答案 0 :(得分:1)

  

如何强制棉花糖始终将parse_float参数传递给JSON负载?

您可以指定自定义render_module

import json

class MyJsonDecimalLoader:
    @staticmethod
    def loads(data):
        return json.loads(data, parse_float=Decimal)

class MySchema(marshmallow.Schema):
    class Meta:
        render_module = MyJsonDecimalLoader

    [...]

我看不到仅使用棉花糖字段如何做得更好,因为dict值中的数据结构是宽松定义的。