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

Django REST Framework:JSON解析器致参数格式异常?

问题分析与解决方案

你遇到的核心问题是jQuery AJAX默认会将嵌套对象序列化为表单编码格式(application/x-www-form-urlencoded),而非JSON格式。此时DRF会启用配置中的CamelCaseFormParser解析请求,该解析器会把嵌套对象拆解成config[param1]这类扁平键值对,而非序列化器期望的嵌套JSON结构。

你的DRF配置里确实包含了JSONParser和CamelCaseJSONParser,但前端未发送JSON格式的请求,导致这些JSON解析器并未被触发。


解决方案1:修改前端AJAX,发送JSON格式数据(推荐)

这是最符合RESTful规范的方式,直接让DRF使用JSON解析器处理请求,得到嵌套结构:

config = {
    param1: 1,
    param2: 2,
    param3: 3
}

$.ajax(APIEndpoints.renderConfig.url, {
    type: APIEndpoints.renderConfig.method,
    headers: { 
        "X-CSRFToken": csrfToken,
        "Content-Type": "application/json" // 指定请求格式为JSON
    },
    data: JSON.stringify({ // 将数据转为JSON字符串
        "config": config,
        "useWorkingConfig": true
    })
});

修改后,DRF会自动使用CamelCaseJSONParser解析请求,request.data将变为你期望的嵌套结构:

{
    "config": {
        "param1": 1,
        "param2": 2,
        "param3": 3
    },
    "useWorkingConfig": true
}

解决方案2:保持表单格式,手动重构嵌套结构

若因特殊需求必须保留表单编码格式,可在APIView中手动将扁平键值对还原为嵌套结构:

from django.http import QueryDict
from rest_framework.views import APIView

class YourRenderConfigAPIView(APIView):
    def post(self, request, *args, **kwargs):
        # 将QueryDict转为可操作的普通字典
        raw_data = request.data.dict()
        # 手动重构config嵌套对象
        config_data = {}
        for key, value in raw_data.items():
            if key.startswith('config[') and key.endswith(']'):
                param_name = key[7:-1]
                config_data[param_name] = value
        # 替换原数据中的config字段
        raw_data['config'] = config_data
        
        # 后续使用重构后的数据进行序列化验证
        serializer = YourConfigSerializer(data=raw_data)
        if serializer.is_valid():
            # 业务逻辑处理
            return Response(serializer.data)
        return Response(serializer.errors, status=400)

补充:列表参数的处理

同理,jQuery AJAX默认会把list_param: [1,2,3]序列化为list_param[]=1&list_param[]=2的格式,使用方案1发送JSON后,会直接得到list_param: [1,2,3]的结构,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:37