如何解决Json到Marshmellow Python的对象列表
我有json,其中包含有关我的对象的数据 我创建了架构以将其序列化为对象列表,但这是行不通的
模式:
from marshmellow import fields,Schema
class ContactSchema(Schema):
first_name = fields.String(attribute="ftNm")
last_name = fields.String(attribute="ltNm")
phone = fields.Integer(attribute="pn")
型号:
class Contact:
id: int
first_name: str
last_name: str
phone: str
我有一个转换功能(但不起作用)
def json_to_list():
json = [{'ftNm': 'Name1','ltNm': 'Surname1','pn': 343434},{'ftNm': 'Name2','ltNm': 'Surname2','pn': 141414},{'ftNm': 'Name3','ltNm': 'Surname3','pn': 656565}]
schema = ContactSchema()
result = schema.dump(json)
如果有人帮助我将json转换为对象列表的功能,我将不胜感激
解决方法
我不确定您的意图是什么。但是,可以通过以下方式进行序列化和反序列化。
序列化和反序列化,重命名变量名称所指定的属性。
from marshmallow import Schema,fields
class ContactSchema(Schema):
first_name = fields.Str(attribute="ftNm",data_key="ftNm")
last_name = fields.Str(attribute="ltNm",data_key="ltNm")
phone = fields.Integer(attribute="pn",data_key="pn")
# serialization to json
def from_list():
data = [
{'ftNm': 'Name1','ltNm': 'Surname1','pn': 343434},{'ftNm': 'Name2','ltNm': 'Surname2','pn': 141414},{'ftNm': 'Name3','ltNm': 'Surname3','pn': 656565}
]
schema = ContactSchema(many=True)
return schema.dump(data)
# deserialization from json
def to_list():
json = [
{'ftNm': 'Name1','pn': 656565}
]
schema = ContactSchema(many=True)
return schema.load(json)
反序列化而无需重命名变量名指定的属性。
class ContactSchema(Schema):
first_name = fields.Str(attribute="ftNm")
last_name = fields.Str(attribute="ltNm")
phone = fields.Integer(attribute="pn")
# deserialization from json
def to_list():
json = [
{'first_name': 'Name1','last_name': 'Surname1','phone': 343434},{'first_name': 'Name2','last_name': 'Surname2','phone': 141414},{'first_name': 'Name3','last_name': 'Surname3','phone': 656565}
]
schema = ContactSchema(many=True)
return schema.load(json)
转换方向可能无法正确显示。
from marshmallow import Schema,fields,post_load
from dataclasses import dataclass
@dataclass
class Contact:
# id: int
first_name: str
last_name: str
phone: str
class ContactSchema(Schema):
first_name = fields.Str(data_key="ftNm")
last_name = fields.Str(data_key="ltNm")
phone = fields.Integer(data_key="pn")
@post_load
def make_user(self,data,**kwargs):
return Contact(**data)
# deserialization from json
def to_list():
json = [
{'ftNm': 'Name1','pn': 656565}
]
schema = ContactSchema(many=True)
return schema.load(json)
要序列化和反序列化数据库模型,建议使用flask-marshmallow和marshmallow-sqlalchemy。
,我不知道这是正常情况,但是我只是创建了一个简单的函数并通过循环反序列化
def create(self,json: dict):
key = Key()
key.id = json.get("id")
key.key_number = json.get("num")
key.hash = json.get("hash")
return key
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。