Django接口查询含None值数据触发JSONDecodeError解析失败问题求助
问题根因
- 核心错误来自你手动处理序列化的逻辑:Python语言的空值标识为
None,JSON标准的空值标识为null。你将包含空值的查询结果列表直接转为字符串后,仅替换单引号为双引号,得到的内容里会保留大写的None,不符合JSON语法规则,所以触发JSONDecodeError报错。 - 额外风险:如果你的
name等字符串字段本身包含单引号,replace("'",'"')操作也会破坏字符串结构,同样会引发解析错误,这种手动转义的方式本身就存在可靠性缺陷。
修复方案
直接使用Django REST Framework原生的序列化能力,完全不需要手动做字符串转换、JSON解析/序列化的冗余操作,修改后代码如下:
@api_view(['GET']) def edges_of_a_network(request, pk): try: roadnetwork = RoadNetwork.objects.get(pk=pk) except RoadNetwork.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) edges = Edge.objects.filter(network=roadnetwork).values("edge_id", "name", "length", "speed", "lanes") return Response(edges)
DRF的Response会自动将Python对象序列化为符合JSON规范的返回内容,自动把None转换为JSON兼容的null,同时处理引号、特殊字符转义等问题,也会自动设置正确的响应头,比手动处理的逻辑稳定可靠。
内容的提问来源于stack exchange,提问作者aba2s
相关产品推荐
相关产品推荐

