gpt4 book ai didi

python-3.x - 如何使用 Marshmallow 序列化嵌套字典?

转载 作者:行者123 更新时间:2023-12-02 23:30:44 26 4
gpt4 key购买 nike

我对棉花糖和 flask 等不熟悉。我试图通过创建一个使用 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

其中数据只是一个嵌套字典。

正是定义架构类给我带来了问题。据我所知,在定义架构时,marshmallow 没有 JSON 类型,当我使用 fields.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)

任何指示将不胜感激

最佳答案

如果要验证嵌套对象,可以使用 Marshmallow 的 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()
# ...

可能会让你继续前进。

关于python-3.x - 如何使用 Marshmallow 序列化嵌套字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905951/

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