Flask解析复杂JSON数据失败的解决方案

Jasper
Jasper
发布时间:2026-10-13| 6人浏览过
原创

本文解决Flask框架在处理前端Post传来的复杂JSON数据(如包含数组对象)时,使用request.form无法正确解析的问题。通过在前端设置Content-Type为application/json请求头,并在后端使用json.loads()配合request.get_data(as_text=True)方法,可完整获取并解析JSON参数。

Flask解析复杂JSON数据的问题背景

在使用Python Flask框架开发后台接口时,通常需要解析前端通过Post方法提交的数据。常规做法是使用request.form来获取这些数据,但当提交的数据结构较为复杂,例如包含数组(array),且数组元素并非简单的数字或字符串,而是包含嵌套对象时,直接使用request.form往往无法正确解析出完整数据。以下JavaScript代码展示了向Flask后端传递此类复杂数据的场景:


$.ajax({
  "url":"/test",
  "method":"post",
  "data":{
      "test":[
        {"test_dict":"1"},
        {"test_dict":"2"},
        {"test_dict":"3"},
        ]
      }
  }
)

当尝试使用Flask的request.form属性获取前端提交的数据时,观察到的结果如下:

request.form解析失败现象


ImmutableMultiDict([('test', 'test_dict'), ('test', 'test_dict'), ('test', 'test_dict')])

原本提交的Post数据似乎丢失了,未能正确获取。

针对这一问题,查阅网络资料发现,许多解决方案建议使用request.form.getlist()方法,但该方法在此场景下并未生效,且难以找到其他有效的替代方案。

解决该问题的关键在于规范前端请求格式。在前端发起请求时,需显式设置Content-Type为application/json的请求头。在Flask后端,直接调用json.loads()方法,并传入request.get_data(as_text=True)的结果,即可成功解析出完整的Post参数。

前端JavaScript代码示例如下:

前端设置JSON请求头


$.ajax({
  "url":"/test",
  "method":"post",
  "headers":{"Content-Type": "application/json;charset=utf-8"},//这一句很重要!!!
  "data":{
    "test":[
        {"test_dict":"1"},
        {"test_dict":"2"},
        {"test_dict":"3"},
      ]
    }
  }
  )

对应的Python Flask后端处理代码如下:

后端完整解析代码实现


@app.route("/test",methods=["GET","POST"])
def test():
  print(json.loads(request.get_data(as_text=True)))
  return ""

执行上述代码后,后端控制台打印的输出信息如下:


* Serving Flask app "test_flask.py"
* Environment: development
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
{'test': [{'test_dict': '1'}, {'test_dict': '2'}, {'test_dict': '3'}]}
127.0.0.1 - - [25/May/2019 22:43:08] "POST /test HTTP/1.1" 200 -

此时问题得以解决,后端能够正确解析并获取完整的JSON数据。

以上内容为本文的全部解决方案,希望对相关开发工作有所帮助,欢迎继续支持本站获取更多技术资源。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。