你不需要转换密钥,因为你不需要。数据不是代码,json中的键不是变量。他们不受PEP8的约束,你也不会改变他们。
如果您有JSON对象键的约定,请在前端和后端的任何地方都遵守它然后用棉花糖3.x
data_key
用于在加载和转储时设置JSON文档中的键名的字段的参数。
例如。
class UserSchema(Schema):
first_name = fields.String(data_key="firstName")
last_name = fields.Email(data_key='lastName')
如果您想自动化所有字段,可以提供自己的
Schema.on_bind_field()
implementation
生成
数据键
字段名中的值:
import re
from functools import partial
from marshmallow import Schema
_snake_case = re.compile(r"(?<=\w)_(\w)")
_to_camel_case = partial(_snake_case.sub, lambda m: m[1].upper())
class CamelCasedSchema(Schema):
"""Gives fields a camelCased data key"""
def on_bind_field(self, field_name, field_obj, _cc=_to_camel_case):
field_obj.data_key = _cc(field_name.lower())
演示:
>>> from marshmallow import fields
>>> class UserSchema(CamelCasedSchema):
... first_name = fields.String()
... last_name = fields.String()
...
>>> schema = UserSchema()
>>> schema.load({"firstName": "Eric", "lastName": "Idle"})
{'first_name': 'Eric', 'last_name': 'Idle'}
>>> schema.dump({"first_name": "John", "last_name": "Cleese"})
{'firstName': 'John', 'lastName': 'Cleese'}
棉花糖文档的示例部分有
similar recipe
是的。
如果使用的是棉花糖2.x,则需要设置两个参数:
load_from
和
dump_to
是的。