Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python+;FlaskRESTAPI,如何在camelcase和snakecase之间转换数据密钥?_Python_Flask_Camelcasing_Snakecasing - Fatal编程技术网

Python+;FlaskRESTAPI,如何在camelcase和snakecase之间转换数据密钥?

Python+;FlaskRESTAPI,如何在camelcase和snakecase之间转换数据密钥?,python,flask,camelcasing,snakecasing,Python,Flask,Camelcasing,Snakecasing,我正在学习Python,并使用micro framework编写简单的REST API 我将用于对象关系映射和对象序列化/反序列化 我使用snakecase作为变量名(根据) 当从前端(角度)接收数据时,我需要将JSON对象键从camelcase转换为snakecase,反之亦然,当返回响应数据时 使用烧瓶进行此操作的最佳方法是什么 我在互联网上找不到一个好答案。您不需要转换钥匙,因为您不需要转换钥匙。数据不是代码,JSON中的键不是变量。他们不受PEP8的约束,你也不会将他们转化 如果您对JS

我正在学习Python,并使用micro framework编写简单的REST API

我将用于对象关系映射和对象序列化/反序列化

我使用snakecase作为变量名(根据)

当从前端(角度)接收数据时,我需要将JSON对象键从camelcase转换为snakecase,反之亦然,当返回响应数据时

使用烧瓶进行此操作的最佳方法是什么


我在互联网上找不到一个好答案。

您不需要转换钥匙,因为您不需要转换钥匙。数据不是代码,JSON中的键不是变量。他们不受PEP8的约束,你也不会将他们转化

如果您对JSON对象键有一个约定,那么无论在前端还是后端,都要遵守它。然后使用Marshmallow 3.x参数作为字段,在加载和转储时设置JSON文档中的键名

例如

如果您想为所有字段自动执行此操作,您可以提供自己的,以便从字段名生成
数据\u键
值:

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())
棉花糖文档的示例部分有一个示例


如果您使用的是Marshmallow 2.x,那么需要设置两个参数:and。

您对Flask API或转换实现有问题吗?您还可以举出一些正确转换的例子吗?现在文档中有一个自动驼峰键的配方:
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'}