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"}
添加回答
举报