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

Python 如何在棉花糖中设置JSON编码器?,python,json,Python,Json,我如何覆盖库中使用的JSON编码器,以便它可以序列化十进制字段?我想我可以通过覆盖基本模式或元类中的JSON_模块来实现这一点,但我不知道如何: 我浏览了所有的文档并阅读了代码,但我不是Python本地人。我认为解决方案是使用作为_string=True: 默认情况下,此字段序列化为decimal.decimal对象。如果你 需要将数据呈现为JSON,请记住JSON模块 标准库中的不编码decimal.decimal。所以,, 必须使用能够处理小数的JSON库,例如 simplejson,或通

我如何覆盖库中使用的JSON编码器,以便它可以序列化
十进制
字段?我想我可以通过覆盖基本
模式
类中的
JSON_模块
来实现这一点,但我不知道如何:


我浏览了所有的文档并阅读了代码,但我不是Python本地人。

我认为解决方案是使用
作为_string=True

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


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

要做到这一点,只需将
类Meta
定义添加到您的模式中,并为此类指定
json_module
属性

例如:

import simplejson

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

    class Meta:
        json_module = simplejson
然后,要序列化:

my_schema = MySchema()
my_schema.dumps(my_object)

我也遇到了同样的问题,最后我将Schema上的字段改为string。在我的例子中,因为我只返回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
选项,它会将数值转换为字符串,这可能不是您想要的行为。谢谢!这件事让我发疯了。工作完美:)