Marshmallow JSON 序列化工具

2021-10-03 07:56:19 字數 2615 閱讀 7964

轉換格式

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=

"[email protected]"

)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=

"[email protected]"

)user2 = user(name=

"keith"

, email=

"[email protected]"

)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...