You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask返回JSON报错:TypeError: set类型对象无法JSON序列化

解决Flask返回自定义JSON格式时的序列化报错

问题场景

用Python Flask开发后端,前端通过JavaScript的fetch请求接口,需要返回文件夹中的列表数据。尝试用f-string拼接字符串构造响应数据,代码如下:

backsend_data = f"'count':'{len(name_value_list)}'"
list_count = 1
while list_count < len(name_value_list):
    backsend_data = backsend_data + f"'name{list_count}':'{name_value_list[list_count]}','info{list_count}':'{info_value_list[list_count]}','class{list_count}':'{class_value_list[list_count]}'"

报错信息

运行时触发以下错误:

Traceback (most recent call last):
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 1498, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 1476, in wsgi_app
    response = self.handle_exception(e)
  File "/home/kon/.local/lib/python3.10/site-packages/flask_cors/extension.py", line 178, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 1473, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 882, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/kon/.local/lib/python3.10/site-packages/flask_cors/extension.py", line 178, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 880, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/kon/.local/lib/python3.10/site-packages/flask/app.py", line 865, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
  File "/home/kon/Documents/Programming/Listed/src/backend/backend.pyw", line 69, in submit
    return jsonify({backsend_data})
  File "/home/kon/.local/lib/python3.10/site-packages/flask/json/__init__.py", line 170, in jsonify
    return current_app.json.response(*args, **kwargs)  # type: ignore[return-value]
  File "/home/kon/.local/lib/python3.10/site-packages/flask/json/provider.py", line 214, in response
    f"{self.dumps(obj, **dump_args)}\n", mimetype=self.mimetype
  File "/home/kon/.local/lib/python3.10/site-packages/flask/json/provider.py", line 179, in dumps
    return json.dumps(obj, **kwargs)
  File "/usr/lib/python3.10/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.10/json/encoder.py", line 201, in encode
    chunks = list(chunks)
  File "/usr/lib/python3.10/json/encoder.py", line 438, in _iterencode
    o = _default(o)
  File "/home/kon/.local/lib/python3.10/site-packages/flask/json/provider.py", line 121, in _default
    raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable")
TypeError: Object of type set is not JSON serializable

期望返回格式

希望返回的JSON结构如下:

{"count":"2", "name1":"example1", "info1":"example1", "class1":"example1", "name2":"example2", "info2":"example2", "class2":"example2"}

解决方案

报错原因

  1. return jsonify({backsend_data})中,大括号直接包裹字符串会创建一个集合,而集合无法被JSON序列化,这是报错的直接原因。
  2. 手动用f-string拼接JSON字符串容易出现格式错误(比如缺少逗号、引号不匹配),且维护性差。

正确代码实现

直接用Python字典构造数据,再交给jsonify处理(Flask会自动完成JSON序列化):

# 初始化响应字典,先设置count
backsend_data = {'count': str(len(name_value_list))}

# 遍历列表,填充对应字段(索引从1开始,和原逻辑一致)
for list_count in range(1, len(name_value_list)):
    backsend_data[f'name{list_count}'] = name_value_list[list_count]
    backsend_data[f'info{list_count}'] = info_value_list[list_count]
    backsend_data[f'class{list_count}'] = class_value_list[list_count]

# 直接返回字典给jsonify
return jsonify(backsend_data)

额外说明

  • 如果列表从索引0开始存储有效数据,把循环的range(1, len(...))改成range(len(...)),同时字段名调整为name{list_count+1}即可保持name1、name2的命名格式。
  • jsonify会自动处理字典到JSON的转换,无需手动拼接字符串,避免格式错误。

内容的提问来源于stack exchange,提问作者kope0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:46:00