python json.dumps:无法忽略不可序列化的对象
在python中,当我想在调试期间漂亮地打印对象时,我使用python json.dumps:无法忽略不可序列化的对象,python,json,Python,Json,在python中,当我想在调试期间漂亮地打印对象时,我使用 print(json.dumps(obj.__dict__), indent=4, sort_keys=True) 因为仅仅使用print(obj)的可读性不强 然后,如果某些项是不可序列化的,它会说 Object of type SOMETHING is not JSON serializable 所以我的目标是在调试时检查一个对象,而不是让一个完全序列化的对象传递它,然后再转换回来 我尝试了以下方法,添加了default=str
print(json.dumps(obj.__dict__), indent=4, sort_keys=True)
因为仅仅使用print(obj)
的可读性不强
然后,如果某些项是不可序列化的,它会说
Object of type SOMETHING is not JSON serializable
所以我的目标是在调试时检查一个对象,而不是让一个完全序列化的对象传递它,然后再转换回来
我尝试了以下方法,添加了default=str
,以避免出现错误,并且在许多情况下都有效
print(json.dumps(obj.__dict__), indent=4, sort_keys=True, default=str)
但在某些情况下,它仍然显示了这一点
Object of type SOMETHING is not JSON serializable
那么如何解决这个问题呢
我正在尝试的对象来自Django项目。我正试图借助json.dumps
from django.db import connections
import json
for c in connections.all():
c_dict = {k: getattr(c, k) for k in dir(c)} # this gives all the properties listed using dir(c)
print(json.dumps(c_dict), indent=4, sort_keys=True, default=str)
回答:
print(json.dumps(obj.__dict__, indent=4, sort_keys=True, default=str))
@米兰巴兰兹在评论中回答了这个问题。这是括号中的键入错误。因此,default=str
作为其缩进到
错的是
print(json.dumps(c_dict), indent=4, sort_keys=True, default=str)
正确的是
print(json.dumps(c_dict, indent=4, sort_keys=True, default=str))
尝试下面的代码,希望这会有所帮助
from json import JSONEncoder
class Encoder(JSONEncoder):
def default(self, o):
return o.__dict__
Encoder().encode(f)
括号的位置不正确 正确的行:
print(json.dumps(obj.__dict__, indent=4, sort_keys=True, default=str))
我发现这个错误
对象没有属性“\uu dict\uuu”
你能提供一个你正在使用的对象类型的示例吗?添加一个示例供参考,括号不正确<代码>打印(json.dumps(obj.\u dict\u,indent=4,sort\u keys=True,default=str))@milanbalanzs你说得对。这就是它不起作用的原因,错误是打印(json.dumps(c_dict),indent=4,sort_keys=True,default=str)正确的是您所说的打印(json.dumps(obj._dict,indent=4,sort_keys=True,default=str))。在这件事上浪费了4-5天,我很高兴能得到帮助。我已经添加了一个答案,所以如果您愿意,您可以标记已回答的问题。