使用Django Rest Framework创建的API在Postman中报JSON解析错误求助
解决Django REST Framework CreateAPIView Postman调用时的JSON解析错误
我之前也碰到过一模一样的问题!你用CreateAPIView写的POST接口在浏览器里正常运行,但Postman调用就报JSON解析错误,核心原因是Postman的请求格式没配置对,导致DRF无法正确解析你的请求体。下面给你拆解问题和具体解决办法:
你的代码回顾
先贴出你的代码方便上下文理解:
views.py
class AuthorCreateAPIView(CreateAPIView): queryset = Author.objects.all() serializer_class = AuthorCreateUpdateSerializer
serializers.py
class AuthorCreateUpdateSerializer(ModelSerializer): class Meta: model = Author fields = [ 'name', 'biography', ]
错误原因解析
你遇到的错误提示:
"detail": "JSON parse error - Expecting value: line 1 column 1 (char 0)"
这个错误说明DRF的JSON解析器没有接收到合法的JSON数据,通常分为两种情况:
- Postman未设置正确的
Content-Type请求头,DRF无法识别你发送的是JSON格式数据 - 请求体的JSON存在语法错误,或者是空请求体
补充说明:浏览器默认用表单提交(application/x-www-form-urlencoded格式),CreateAPIView默认支持这种格式,所以浏览器里能正常运行,但Postman不会自动帮你配置这些,需要手动调整。
解决办法
方法1:正确配置Postman请求(推荐)
这是最直接的解决方式,确保Postman发送合法的JSON请求:
- 打开Postman的POST请求页面
- 切换到Headers标签,添加一条请求头:
- Key:
Content-Type,Value:application/json
- Key:
- 切换到Body标签:
- 选择
raw选项,右侧格式下拉框选JSON - 输入合法的JSON请求体,示例:
{ "name": "George Orwell", "biography": "Author of 1984 and Animal Farm." } - 注意检查JSON语法:引号要成对、逗号不要冗余、键名要和序列化器字段完全匹配(
name和biography)
- 选择
方法2:让视图同时支持JSON和表单格式
如果你希望接口既能兼容Postman的JSON请求,又能支持浏览器的表单提交,可以给视图添加多解析器支持:
修改你的views.py:
from rest_framework.generics import CreateAPIView from rest_framework.parsers import JSONParser, FormParser, MultiPartParser from .models import Author from .serializers import AuthorCreateUpdateSerializer class AuthorCreateAPIView(CreateAPIView): queryset = Author.objects.all() serializer_class = AuthorCreateUpdateSerializer # 添加多解析器,同时支持JSON和表单格式 parser_classes = [JSONParser, FormParser, MultiPartParser]
这样不管是JSON请求还是表单请求,DRF都能正确解析处理。
内容的提问来源于stack exchange,提问作者Sadman Sobhan
相关产品推荐
相关产品推荐

