我是棉花糖和烧瓶等的新手。 我正在尝试通过创建使用jsonified python字典的API进行学习。字典包含这样的嵌套字典。它还包含一些Null项。
{
"TITLE": "XXX",
"NAME": "Mongoose",
"TIME": "0430",
"USED": null,
"DESCRIPTION": "",
"WEAPONS": {
"HEAT": "Israel",
"RADAR": "Flat",
"CONV": {
"S": true,
"N": false,
"A": false
},
},
}
我只是想将其消耗回字典类型。在POST操作中这样的事情
fields_schema = FieldSchema(many=True)
field_schema = FieldSchema()
json_data = request.get_json(force=True)
if not json_data:
return {'message': 'No input data provided'}, 400
# Validate and deserialize input
try:
data = field_schema.load(json_data)
except ValidationError as e:
return e.messages, 422
数据只是嵌套字典。
它正在定义导致我出现问题的架构类。 据我所知,当定义架构时,棉花糖没有JSON类型,当我使用字段时.Dict我收到以下错误:
{
"meta": [
"Missing data for required field."
],
"TITLE": [
"Unknown field."
etc...
我不确定是应该使用嵌套模式还是要完全解决复杂问题。
我的fields_schema当前如下所示:
class FieldSchema(ma.Schema):
id = fields.Integer()
meta = fields.Dict(required=True)
任何指针将不胜感激
答案 0 :(得分:2)
如果要验证嵌套对象,则可以使用棉花糖的fields.Nested
功能。
使用他们的示例
from marshmallow import Schema, fields, pprint class UserSchema(Schema): name = fields.String() email = fields.Email() created_at = fields.DateTime() class BlogSchema(Schema): title = fields.String() author = fields.Nested(UserSchema) user = User(name="Monty", email="monty@python.org") blog = Blog(title="Something Completely Different", author=user) result = BlogSchema().dump(blog) pprint(result) # {'title': u'Something Completely Different', # 'author': {'name': u'Monty', # 'email': u'monty@python.org', # 'created_at': '2014-08-17T14:58:57.600623+00:00'}}
尽管如此,您仍需要从根文档中定义模式。像
class Widget(Schema):
TITLE = fields.String()
NAME = fields.String()
# ...
WEAPONS = fields.Nested(Weapon)
class Weapon(Schema):
HEAT = fields.String()
# ...
可能会帮助您