Django REST ListCreateView GET正常但POST报JSON解析错误如何解决
问题原因与解决方法
你遇到的JSON parse error - Expecting value: line 1 column 1 (char 0)报错和你编写的模型、视图、序列化器代码没有关联,是POST请求构造不符合规范导致的。
常见问题与对应解决方式
- 缺失正确请求头:发送POST请求时必须在请求头中添加
Content-Type: application/json,如果请求头格式是form-data、x-www-form-urlencoded,或者没有该字段,DRF就无法正确解析JSON格式的请求体,触发该错误。 - 请求体为空:没有携带任何JSON数据直接发起POST请求,解析器从第一行第一个字符就找不到合法的JSON内容,直接报错。
- JSON格式非法:请求体的内容不符合JSON语法规范,常见的错误包括使用单引号包裹字符串、遗漏大括号/引号、末尾多余逗号、存在未转义的特殊字符等。
合法请求示例(curl格式)
curl -X POST <你的接口访问地址> \ -H "Content-Type: application/json" \ -d '{ "invoice_number": "INV001", "description": "运维服务", "rate": 500.0, "units": 2, "discount": 0, "amount": 1000.0, "service_or_expense": "SER", "type": "CAE" }'
接口测试工具配置要点
如果你用Postman、Apifox这类可视化工具发请求,按以下步骤检查配置:
- 请求体切换到
raw模式,右侧格式选择JSON - 输入符合语法的请求体内容,不要留空
- 检查请求头列表,确认自动生成的
Content-Type字段值为application/json
快速验证方法
你可以直接访问DRF自带的接口调试页面,向下滚动找到POST提交表单,填入对应字段提交,如果提交成功就可完全确认是请求构造的问题,和后端代码无关。
内容的提问来源于stack exchange,提问作者Ruben Adriaanse
相关产品推荐
相关产品推荐

