'Missing data' 当尝试使用棉花糖 data_key 加载数据时
'Missing data' when try to load data with data_key using marshmallow
我尝试在 python 3.7 上使用 marshmallow 2.18.0 来验证数据。我在等待 json {'name': 'foo', 'emailAddress': 'x@x.org'}
并使用架构加载它:
class FooLoad(Schema):
name = fields.Str()
email = fields.Email(data_key='emailAddress', required=True)
我除了 data_key 在 load 上会 return 我有点像 {'name': 'foo', 'email': 'x@x.org'}
,但我在错误字段中出错:
schema_load = FooLoad()
after_load = schema_load.load({'name': 'foo', 'emailAddress': 'x@x.org'})
after_load.errors # return {'email': ['Missing data for required field.']}
但是根据 marshmallow docs with devDependencies or github issue after_load 的例子必须包含像 {'name': 'foo', 'email': 'x@x.org'}
.
这样的数据
我想反序列化名称不同于架构属性名称的传入日期(指定 date_key 所需的内容),但尝试时出现错误.我如何使用名称反序列化输入数据,不同于架构属性并在此属性的 data_key 字段中声明?
data_key
是在 marshmallow 3 中引入的。
Backwards-incompatible: Add data_key
parameter to fields for specifying the key in the input and output data dict. This parameter replaces both load_from
and dump_to
(#717).
和关联 pull-request.
使用marshmallow 2时,必须使用load_from
/dump_to
:
class FooLoad(Schema):
name = fields.Str()
email = fields.Email(load_from='emailAddress', dump_to='emailAddress', required=True)
您正在使用 marshmallow 2,但正在阅读 marshmallow 3 的文档。
请注意,marshmallow 3 包含大量改进并且处于 RC 状态,因此如果您正在开始一个项目,您可以选择 marshmallow 3 并在未来为自己节省一些过渡工作。
我遇到了同样的现象,试图解析 API 响应。事实证明,虽然我需要在响应中更深入地钻取 1 个级别,但比我做的要早。
回复是:
{
"meta": {
"status": 200,
"message": null
},
"response": {
"ownerId": "…",
"otherData": […]
}
}
然后我在打电话:
MySchema().load(response.json())
…
class MySchema(Schema):
owner_id = fields.String(data_key='ownerId')
…
Meta:
unknown = INCLUDE
@post_load
def load_my_object(self, data, **kwargs):
inner = data.get('response', data)
return MyObject(**inner)
但实际上,它应该是:
inner = data.get('response', data)
return MySchema().load(inner)
…
class MySchema(Schema):
owner_id = fields.String(data_key='ownerId')
…
Meta:
unknown = INCLUDE
@post_load
def load_my_object(self, data, **kwargs):
return MyObject(**data)
我尝试在 python 3.7 上使用 marshmallow 2.18.0 来验证数据。我在等待 json {'name': 'foo', 'emailAddress': 'x@x.org'}
并使用架构加载它:
class FooLoad(Schema):
name = fields.Str()
email = fields.Email(data_key='emailAddress', required=True)
我除了 data_key 在 load 上会 return 我有点像 {'name': 'foo', 'email': 'x@x.org'}
,但我在错误字段中出错:
schema_load = FooLoad()
after_load = schema_load.load({'name': 'foo', 'emailAddress': 'x@x.org'})
after_load.errors # return {'email': ['Missing data for required field.']}
但是根据 marshmallow docs with devDependencies or github issue after_load 的例子必须包含像 {'name': 'foo', 'email': 'x@x.org'}
.
我想反序列化名称不同于架构属性名称的传入日期(指定 date_key 所需的内容),但尝试时出现错误.我如何使用名称反序列化输入数据,不同于架构属性并在此属性的 data_key 字段中声明?
data_key
是在 marshmallow 3 中引入的。
Backwards-incompatible: Add
data_key
parameter to fields for specifying the key in the input and output data dict. This parameter replaces bothload_from
anddump_to
(#717).
和关联 pull-request.
使用marshmallow 2时,必须使用load_from
/dump_to
:
class FooLoad(Schema):
name = fields.Str()
email = fields.Email(load_from='emailAddress', dump_to='emailAddress', required=True)
您正在使用 marshmallow 2,但正在阅读 marshmallow 3 的文档。
请注意,marshmallow 3 包含大量改进并且处于 RC 状态,因此如果您正在开始一个项目,您可以选择 marshmallow 3 并在未来为自己节省一些过渡工作。
我遇到了同样的现象,试图解析 API 响应。事实证明,虽然我需要在响应中更深入地钻取 1 个级别,但比我做的要早。
回复是:
{
"meta": {
"status": 200,
"message": null
},
"response": {
"ownerId": "…",
"otherData": […]
}
}
然后我在打电话:
MySchema().load(response.json())
…
class MySchema(Schema):
owner_id = fields.String(data_key='ownerId')
…
Meta:
unknown = INCLUDE
@post_load
def load_my_object(self, data, **kwargs):
inner = data.get('response', data)
return MyObject(**inner)
但实际上,它应该是:
inner = data.get('response', data)
return MySchema().load(inner)
…
class MySchema(Schema):
owner_id = fields.String(data_key='ownerId')
…
Meta:
unknown = INCLUDE
@post_load
def load_my_object(self, data, **kwargs):
return MyObject(**data)