TypeError:类型集的对象不是 JSON 可序列化的
TypeError: Object of type set is not JSON serializable
当我们尝试将set
对象转换为 JSON 字符串时,会出现 Python“TypeError: Object of type set is not JSON serializable”。要解决该错误,请在将其set
序列化为 JSON 之前将其转换为列表,例如
json.dumps(list(my_set))
.
下面是错误如何发生的示例。
import json my_set = {'a', 'b', 'c', 'd'} # ⛔️ TypeError: Object of type set is not JSON serializable json_str = json.dumps(my_set)
我们尝试将set
对象传递给该方法,但默认情况下json.dumps()
该方法不处理对象set
要解决该错误,请在序列化之前使用内置list()
类将 he 转换set
为 a
。list
import json my_set = {'a', 'b', 'c', 'd'} json_str = json.dumps(list(my_set)) print(json_str) # '["b", "c", "a", "d"]' print(type(json_str)) # <class 'str'>
默认的 JSON 编码器处理list
值,因此我们可以
在序列化为 JSON 时使用本机 Pythonlist
而不是Python。set
json.dumps方法将 Python 对象转换为 JSON 格式的字符串。
或者,您可以从JSONEncoder
类扩展并在方法中处理转换default
。
import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj) my_set = {'a', 'b', 'c', 'd'} json_str = json.dumps(my_set, cls=SetEncoder) print(json_str) # 👉️ '["b", "c", "a", "d"]' print(type(json_str)) # 👉️ <class 'str'>
我们从
JSONEncoder
类扩展而来。
该类JSONEncoder
默认支持以下对象和类型。
Python | JSON |
---|---|
字典 | 目的 |
列表,元组 | 大批 |
海峡 | 细绳 |
int、float、int 和 float 派生枚举 | 数字 |
真的 | 真的 |
错误的 | 错误的 |
没有任何 | 无效的 |
请注意,JSONEncoder
该类默认不支持set
JSON 转换。
我们可以通过从类扩展并实现一个default()
返回可序列化对象的方法来处理这个问题。
import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj)
如果传入的值是 a set
,我们将其转换为 alist
并返回结果。
如果传入的对象是传入类的实例或子类,则isinstance
函数返回。True
要使用自定义,请在调用该方法时使用关键字参数JSONEncoder
指定它。cls
json.dumps()
import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj) my_set = {'a', 'b', 'c', 'd'} # ✅ pass cls keyword argument json_str = json.dumps(my_set, cls=SetEncoder) print(json_str) # 👉️ '["b", "c", "a", "d"]' print(type(json_str)) # 👉️ <class 'str'>
如果您不提供cls
kwarg,JSONEncoder
则使用默认值。
结论#
当我们尝试将set
对象转换为 JSON 字符串时,会出现 Python“TypeError: Object of type set is not JSON serializable”。要解决该错误,请在将其set
序列化为 JSON 之前将其转换为列表,例如
json.dumps(list(my_set))
.