2 回答

TA貢獻1798條經驗 獲得超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) )
如果您想對默認編碼器無法處理的所有內容進行字符串化,您可以使用以下技巧,盡管我建議您控制您想要支持的類型。
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

TA貢獻1833條經驗 獲得超4個贊
不,沒有,但您可以單獨檢查數據項并在需要時進行轉換。這樣你就不需要提前知道數據結構。考慮以下:
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"}
添加回答
舉報