首页 > 解决方案 > python json.dumps:无法忽略不可序列化的对象

问题描述

在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)

回答:

@milanbalanz 在评论中回答了它。它是typo error括号中的一个。所以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))

标签: pythonjson

解决方案


试试下面的代码,希望这会有所帮助。

from json import JSONEncoder

class Encoder(JSONEncoder):
        def default(self, o):
            return o.__dict__ 

Encoder().encode(f)

推荐阅读