轉換格式
string–object–string互相轉換
定義 scheme
from datetime import datetime
class
user()
:def
__init__
(self, name, email)
: self.name = name
self.email = email
self.created_at = datetime.now(
)
需要建立乙個對應的 schema 類來實現該類物件的序列化和反序列化:
from marshmallow import schema, fields
class
userschema
(schema)
: name = fields.str(
) email = fields.email(
) created_at = fields.datetime(
)
建立 schema 類時,其中的字段必須與原始類中的命名一致,否則該字段將不會序列化和反序列化。
序列化使用 schema 類的 dump() 來完成 obj -> dict 的轉換,或者使用 dumps() 方法來完成 obj -> string 的轉換。
from marshmallow import pprint
user = user(name=
"monty"
, email=
)schema = userschema(
)result = schema.dump(user)
pprint(result)
json_result = schema.dumps(user)
pprint(json_result)
from pprint import pprint
user_data =
schema = userschema(
)result = schema.load(user_data)
pprint(result)
3.反序列化
可使用 schema 類的 load() 來完成 dict -> dict 的轉換,或者使用 loads() 方法來完成 string -> dict 的轉換。注意這裡的轉換結果預設都是 dict,這個 dict 跟原始的 dict 不一樣,只會包含 schema 類裡有定義的字段。
from pprint import pprint
user_data =
schema = userschema(
)result = schema.load(user_data)
pprint(result)
如果要實現 dict -> obj 或 string -> obj 轉換,需要在 schema 類中額外定義乙個 post_load 裝飾器方法。
from marshmallow import schema, fields, post_load
class
userschema
(schema)
: name = fields.str(
) email = fields.email(
) created_at = fields.datetime(
) @post_load
defmake_user
(self, data)
:return user(
**data)
from pprint import pprint
user_data =
schema = userschema(
)result = schema.load(user_data)
pprint(result)
4.處理物件列表
只需要在 load 和 dump 時指定引數 many=true 即可。
from marshmallow import pprint
user1 = user(name=
"mick"
, email=
)user2 = user(name=
"keith"
, email=
)users =
[user1, user2]
schema = userschema(many=
true
)result = schema.dump(users)
pprint(result)
schema = userschema(
)result = schema.dump(users, many=
true
)pprint(result)
物件序列化工具
物件類的序列化輕型的xml和複雜型的byte方式 物件序列化工具 public class objectserializationhelper return xmlserializer dict thash 把物件序列化為字串 物件型別 物件 序列化後的字串,失敗則會丟擲異常資訊 public st...
ProtoStuff序列化工具
專案中http通訊離不開物件的序列化和反序列化,通過序列化技術,可以跨語言實現資料的傳輸,例如把乙個物件序列化後的二進位制資料 xml格式資料存放在檔案中,下次通過讀取檔案,然後反序列化一下即可重新生成該物件,抑或通過網路把序列化後的資料傳輸到另乙個終端,對方通過反序列化後也可以重新複製出乙個大概相...
xml序列化與反序列化工具
using system using system.collections.generic using system.linq using system.text using system.io using system.xml.serialization using system.xml name...