python json.dumps:无法忽略不可序列化的对象

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

在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, 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天,我很高兴能得到帮助。我已经添加了一个答案,所以如果您愿意,您可以标记已回答的问题。