class Encoder(json.JSONEncoder): def default(self, obj): """ 只要检查到了是bytes类型的数据就把它转为str类型 :param obj: :return: """ if isinstance(obj, bytes): return str(obj, encoding='utf-8') return json.JSONEncoder.default(self, obj) 报错:E AttributeError: type object 'Encoder' has no attribute '__members__'
时间: 2023-06-27 07:08:07 浏览: 225
这个错误可能是因为您的代码中使用了 `Encoder` 这个类名,但是该类名可能已经被其他模块或库使用了,导致与现有的定义冲突。您可以尝试修改类名,或者在类名前面加上模块名,以避免命名冲突。另外,您的代码中缺少类的声明,需要加上类的声明部分:
```
import json
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, bytes):
return str(obj, encoding='utf-8')
return json.JSONEncoder.default(self, obj)
```
这样应该就可以正常使用了。
相关问题
self = <json.encoder.JSONEncoder object at 0x0000014E7C1624A0> o = <Personal_data.URL_个人资料: 'https://maitenghuicai.com'> def default(self, o): """Implement this method in a subclass such that it returns a serializable object for ``o``, or calls the base implementation (to raise a ``TypeError``). For example, to support arbitrary iterators, you could implement default like this:: def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return JSONEncoder.default(self, o) """ > raise TypeError(f'Object of type {o.__class__.__name__} ' f'is not JSON serializable') E TypeError: Object of type Personal_data is not JSON serializable
这个错误是因为默认的 JSONEncoder 不知道如何将 `Personal_data` 类型的对象转换为 JSON 格式的字符串。
你可以通过自定义编码器来解决这个问题。你需要创建一个类,继承自 `json.JSONEncoder`,并实现 `default()` 方法,将 `Personal_data` 类型的对象转换为可序列化的 Python 对象或字符串。
以下是一个示例:
```python
import json
from Personal_data import Personal_data
class PersonalDataEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Personal_data):
return str(obj)
return super().default(obj)
data = {'url': Personal_data('https://maitenghuicai.com')}
json_data = json.dumps(data, cls=PersonalDataEncoder)
print(json_data)
```
在这里,我们创建了 `PersonalDataEncoder` 类,并重载了 `default()` 方法。如果 `obj` 是一个 `Personal_data` 实例,我们将其转换为一个字符串。否则,我们调用父类的 `default()` 方法来处理其他类型的对象。最后,我们使用 `PersonalDataEncoder` 类作为 `json.dumps()` 的 `cls` 参数,将 Python 对象转换为 JSON 字符串。
这将输出一个 JSON 格式的字符串,其中包含一个 `url` 键和 `Personal_data` 对象的字符串表示。
阅读全文