类型set的对象是不可JSON序列化的



我试图通过下面的列表ajax响应,但我得到下面的错误

remove_duplicates = [{**l[0], 'record_id': set([x['record_id'] for x in l])} if len(l:=list(v)) > 1 else l[0] for _, v in groupby(sorted(list_of_dict, key=func), key=func)]

我正在使用set删除重复的记录id

list_of_dicts = [{'f_note':'text','record_id':{4691}},{'f_note':'sample','record_id':{4692}}]
return jsonify(list_of_dicts )

类型集合的对象不是JSON可序列化的

请给我一个更好的选择。

当你创建字典列表时,你的内部值{4691}实际上是一个集合,而不是字典。

https://realpython.com/python-sets/

试试这个:

list_of_dicts = [{'f_note':'text','record_id': 4691},{'f_note':'sample','record_id': 4692}]
return jsonify(list_of_dicts)

查看您遇到的孤立错误

import json
test = {5565}
json.dumps(test)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:UserspAppDataLocalProgramsPythonPython39libjson__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:UserspAppDataLocalProgramsPythonPython39libjsonencoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:UserspAppDataLocalProgramsPythonPython39libjsonencoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:UserspAppDataLocalProgramsPythonPython39libjsonencoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type set is not JSON serializable

要保持set功能,可以将其强制转换回列表

remove_duplicates = [{**l[0], 'record_id': list(set([x['record_id'] for x in l]))} if len(l:=list(v)) > 1 else l[0] for _, v in groupby(sorted(list_of_dict, key=func), key=func)]