gpt4 book ai didi

python - 反序列化棉花糖中的嵌套字段

转载 作者:太空狗 更新时间:2023-10-29 20:39:25 30 4
gpt4 key购买 nike

我正在使用一个返回类似内容的 API:

{'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}

我想用 marshmallow 对其进行反序列化以仅获取名称和开始日期,因此所需的结果如下:

{'name': 'foo', 'date': '2016-06-19'}

但我还没有找到任何获取日期的方法,这是我尝试过的:

from marshmallow import Schema, fields, pprint

event = {'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
class EventSchema(Schema):
name = fields.Str()
date = fields.Str(load_from='start.date')


schema = EventSchema()
result = schema.load(event)
pprint(result.data)

最佳答案

您所描述的可以通过在预处理*步骤中转换*您的输入数据来完成。虽然接受的答案看起来会这样做,Marshmallow has built-in decorators让您以我认为更清晰的方式完成此任务:

from marshmallow import Schema, pre_load, fields, pprint

event = {'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
expected = {'name': 'foo', 'date': '2016-06-19'}


class EventSchema(Schema):
name = fields.Str()
# Marshmallow 2
date = fields.Str(load_from='date')
# Marshmallow 3
date = fields.Str(data_key='date')

@pre_load
def move_date(self, data):
"""This will alter the data passed to ``load()`` before Marshmallow
attempts deserialization.
"""
start = data.pop('start')
data['date'] = start['date']
return data

schema = EventSchema()
result = schema.load(event)
pprint(result.data)

assert result.data == expected

* transformpre-process 是对象建模和数据处理领域的专业术语。我将它们加粗是因为了解这些可能有助于成功阅读此问题的人通过 Google 搜索相关问题的答案。

关于python - 反序列化棉花糖中的嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907224/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com