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