type(o).__name__ is not JSON serializable
时间: 2024-12-15 19:24:30 浏览: 1
当你尝试将一个对象序列化为JSON格式时,如果该对象包含一些无法直接转换为JSON格式的属性或方法(例如自定义类实例),Python的`json`模块会抛出一个错误,提示“TypeError: Object of type 'o' is not JSON serializable”。这里的`type(o).__name__`表示的是对象`o`的类型名称。
要解决这个问题,你可以使用`json`模块提供的`JSONEncoder`类,并重写其默认的`default`方法来处理那些无法直接序列化的对象。下面是一个示例代码:
```python
import json
class MyClass:
def __init__(self, name):
self.name = name
# 创建一个自定义的JSON编码器
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, MyClass):
return {'name': obj.name}
return super().default(obj)
# 创建MyClass的一个实例
obj = MyClass('example')
# 使用自定义的JSON编码器将对象序列化为JSON字符串
json_str = json.dumps(obj, cls=CustomEncoder)
print(json_str)
```
在这个例子中,我们首先定义了一个名为`MyClass`的类。然后,我们创建了一个名为`CustomEncoder`的自定义JSON编码器,它继承自`json.JSONEncoder`。在`CustomEncoder`中,我们重写了`default`方法,以便在遇到`MyClass`的实例时,将其转换为一个包含`name`属性的字典。最后,我们使用这个自定义编码器将一个`MyClass`的实例序列化为JSON字符串。
阅读全文