第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何序列化成員不能直接序列化的對象,但它們的 str() 表示是?

如何序列化成員不能直接序列化的對象,但它們的 str() 表示是?

qq_遁去的一_1 2022-06-28 15:18:13
我收到諸如(事先不知道確切結(jié)構(gòu))之類的聽寫{  'a': 1,  'id': UUID('6b3acb30-08bf-400c-bc64-bf70489e388c'),}此 dict 不能直接序列化,但是當(dāng)將值id轉(zhuǎn)換為str- 時,它是:import jsonimport uuidprint(json.dumps({  'a': 1,  'id': str(uuid.UUID('6b3acb30-08bf-400c-bc64-bf70489e388c')),}))# outputs {"a": 1, "id": "6b3acb30-08bf-400c-bc64-bf70489e388c"}在一般情況下,我有需要在可str序列化之前轉(zhuǎn)換為的元素,是否有一種通用(pythonic)方法可以自動進(jìn)行轉(zhuǎn)換?
查看完整描述

2 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊

最好的選擇是覆蓋JSONEncoder.default方法:


class MyJSONEncoder(json.JSONEncoder):

    def default(self, o):

        if isinstance(o, uuid.UUID):

            return str(o)

        return super().default(o)


print( MyJSONEncoder().encode(data) )

如果您想對默認(rèn)編碼器無法處理的所有內(nèi)容進(jìn)行字符串化,您可以使用以下技巧,盡管我建議您控制您想要支持的類型。


class MyJSONEncoder(json.JSONEncoder):

    def default(self, o):

        try:

            return super().default(o)

        except TypeError:

            return str(o)


print( json.dumps(data, cls=MyJSONEncoder) )

文檔: https ://docs.python.org/3/library/json.html#json.JSONEncoder.default


查看完整回答
反對 回復(fù) 2022-06-28
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗 獲得超4個贊

不,沒有,但您可以單獨檢查數(shù)據(jù)項并在需要時進(jìn)行轉(zhuǎn)換。這樣你就不需要提前知道數(shù)據(jù)結(jié)構(gòu)??紤]以下:


import json

import uuid


data = {

  'a': 1,

  'id': UUID('6b3acb30-08bf-400c-bc64-bf70489e388c')

}


for k, v in data.items():

    try:

        json.dumps(v)

    except TypeError:

        data[k] = str(uuid.v)


print(json.dumps(data))


# outputs {"a": 1, "id": "6b3acb30-08bf-400c-bc64-bf70489e388c"}


查看完整回答
反對 回復(fù) 2022-06-28
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號