为什么我的JSON输出中有一堆反斜杠

2024-09-30 20:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用下面的代码将模型数据作为json发送

视图.py

def autocomplete(request):
    model = NewCarModel.objects.only('car_model_new')
    print('model is',model)
   # users_list = list(model)
    posts_serialized = serializers.serialize('json', model)
    print('post is',posts_serialized)

    return JsonResponse(posts_serialized,safe=False)

models.py

class NewCarModel(models.Model):
    car_model_new = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.car_model_new

输出:

"[{\"model\": \"core.newcarmodel\", \"pk\": 1, \"fields\": {\"car_model_new\": \"swift\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 2, \"fields\": {\"car_model_new\": \"wagonr\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 3, \"fields\": {\"car_model_new\": \"baleno\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 4, \"fields\": {\"car_model_new\": \"breeza\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 5, \"fields\": {\"car_model_new\": \"spresso\"}}]"

为什么我的JSON输出中有很多反斜杠,我如何删除它们,Mozilla Firefox默认JSON过滤器也不起作用,我也无法使用java脚本从中提取数据(因为我能够从一些公共API提取数据,所以提取代码没有问题)

编辑:

我是如何尝试提取数据的 将JSON解析为变量myArr后

const carModelsArr = myArr.data.map((d) => d.fields.car_model_new

编辑2: 所以,解决无法extact的方法是

var myArr = JSON.parse(this.responseText);

使用此选项:

var myArr = JSON.parse(JSON.parse(this.responseText));

并且提取代码是可以工作的

但这仍然不能解决反斜杠问题,如果可能的话,我希望避免使用DRF


Tags: 数据代码corejsonfieldsnewmodelparse
2条回答

这是因为JsonResponse。正如您在文档odJsonResponse中看到的,它需要一个字典,而您已经创建了一个JSON字符串。我假设,由于您说safe=False,它接受了字符串

我建议将其替换为DRF Response,或者将其从查询解析为Python dict(我更喜欢DRF响应选项)

有关更多信息,请查看链接中的文档

注意:我自己没有运行代码-这是我的假设

我认为序列化程序这样做是为了在dict对象周围加上双引号",同时将它们转换为Json对象。可能那个dict对象已经有了包含相同双引号"的键或值。因此出现了反斜杠

如果使用Python则必须使用json.loads,否则JSON.parse如果使用JS

Python3:

json.loads(response)

JS:

JSON.parse(data)

enter image description here

编辑

您将数据序列化两次,因此使用了反斜杠,并被迫使用JSON.parse两次。因为您已经序列化了响应,所以可以简单地使用HttpResponseResponse返回序列化的数据

解决方案-1

from django.http import HttpResponse
return HttpResponse(posts_serialized, content_type='application/json')

解决方案-2

from rest_framework.response import Response
return Response(posts_serialized, content_type='application/json')

相关问题 更多 >