TypeError: Object of type {Type} is not JSON serializable
TypeError: Object of type {Type} is not JSON serializable
我注意到我正在寻找的将变量序列化为 python 中的 JSON 的方法似乎并不能很好地处理它,为了我的目的,我只是想要快速将对象内容转储为字符串格式,这样我就可以挑选出我真正想要编写自定义代码来处理的内容。我希望能够至少转储任何 class 中的主要字段我通过了 python 序列化程序,如果它确实值得这个名字,那么它应该可以工作。
所以取下面的代码:
import json
c = SomeClass()
#causes an error if any field in someclass has another class instance.
json.dumps(c)
导致..
TypeError: {Type} 类型的对象不是 JSON 可序列化的
是否有其他人使用过的模块可以解决我的问题?我真的不明白怎么会没有。或者也许有人可以解释如何避免这个错误?
我们的目标是简单地获取一些要查看的输出。如果我使用反射在 c# 中编写递归循环,循环引用除外,这并不困难,所以我无法想象 python 用户从未解决过这个确切的问题,我对我的答案不满意在较旧的帖子中看到,这些帖子似乎建议对某些内容进行大量自定义修补,其设计精神似乎只是将任何旧对象的内容转储出来。
我什至不需要复杂的遍历是有趣的部分,尽管它会很好。我只需要 属性 值的转储,这些值在许多情况下都是原始类型。我知道这是可能的,因为调试器做到了。
此外,我查看了其中一种指示使用默认 lambda 来指定 json 序列化程序应如何下降到对象中的方法:
json.dumps(o, default=lambda k: k.__dict__)
并且该对象不包含标准 dict 成员。
最后我只是写了一个class来做到这一点。
编辑:
Here use this 现在你可以用我添加的这段漂亮的代码来序列化一个 class 结构来解决我的 f**** discord.py 问题!
结束编辑
没有可以解开大量信息的即发即弃选项。
创建此解决方案的方法是管理单独的子classes 列表,以确保在达到 Whosebug 之前不会递归。
当 hasattr(o,'dict') 为 False 时,slots_ 可以与 getattr(o,name) 一起使用。
但答案是你必须创建一个解决方案,基本上完成 json 序列化程序应该做的工作,并通过确定独特的复杂类型并将它们写在单独的表格中来消除循环引用json 文件中的条目并在引用 class 中用 ID 替换它们。
这样您就可以在浏览这些对象的同时交叉引用它们。
然而简短的回答是否定的。 Python 没有提供开箱即用的方法,到目前为止遇到的所有提供的答案都只解决了一个用例或场景,并且没有为上述算法创建的问题创建一个合并的解决方案可以通过将 class 数据规范化为唯一元素。
我注意到我正在寻找的将变量序列化为 python 中的 JSON 的方法似乎并不能很好地处理它,为了我的目的,我只是想要快速将对象内容转储为字符串格式,这样我就可以挑选出我真正想要编写自定义代码来处理的内容。我希望能够至少转储任何 class 中的主要字段我通过了 python 序列化程序,如果它确实值得这个名字,那么它应该可以工作。
所以取下面的代码:
import json
c = SomeClass()
#causes an error if any field in someclass has another class instance.
json.dumps(c)
导致..
TypeError: {Type} 类型的对象不是 JSON 可序列化的
是否有其他人使用过的模块可以解决我的问题?我真的不明白怎么会没有。或者也许有人可以解释如何避免这个错误?
我们的目标是简单地获取一些要查看的输出。如果我使用反射在 c# 中编写递归循环,循环引用除外,这并不困难,所以我无法想象 python 用户从未解决过这个确切的问题,我对我的答案不满意在较旧的帖子中看到,这些帖子似乎建议对某些内容进行大量自定义修补,其设计精神似乎只是将任何旧对象的内容转储出来。
我什至不需要复杂的遍历是有趣的部分,尽管它会很好。我只需要 属性 值的转储,这些值在许多情况下都是原始类型。我知道这是可能的,因为调试器做到了。
此外,我查看了其中一种指示使用默认 lambda 来指定 json 序列化程序应如何下降到对象中的方法:
json.dumps(o, default=lambda k: k.__dict__)
并且该对象不包含标准 dict 成员。
最后我只是写了一个class来做到这一点。
编辑:
Here use this 现在你可以用我添加的这段漂亮的代码来序列化一个 class 结构来解决我的 f**** discord.py 问题!
结束编辑
没有可以解开大量信息的即发即弃选项。
创建此解决方案的方法是管理单独的子classes 列表,以确保在达到 Whosebug 之前不会递归。
当 hasattr(o,'dict') 为 False 时,slots_ 可以与 getattr(o,name) 一起使用。
但答案是你必须创建一个解决方案,基本上完成 json 序列化程序应该做的工作,并通过确定独特的复杂类型并将它们写在单独的表格中来消除循环引用json 文件中的条目并在引用 class 中用 ID 替换它们。
这样您就可以在浏览这些对象的同时交叉引用它们。
然而简短的回答是否定的。 Python 没有提供开箱即用的方法,到目前为止遇到的所有提供的答案都只解决了一个用例或场景,并且没有为上述算法创建的问题创建一个合并的解决方案可以通过将 class 数据规范化为唯一元素。