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

Python 为什么我的JSON输出中有一堆反斜杠,python,json,django,django-models,Python,Json,Django,Django Models,我尝试使用下面的代码将模型数据作为json发送 Views.py 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

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

Views.py

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。我认为序列化程序在将dict对象转换为Json对象时,会在dict对象周围加上双引号。可能那个dict对象已经有了包含相同双引号的键或值。因此出现了反斜杠

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

蟒蛇3:

JS:

编辑 您将数据序列化两次,因此需要使用反斜杠,并且必须使用JSON.parse两次。因为您已经序列化了响应,所以可以简单地使用HttpResponse或response返回序列化的数据

解决方案1:

解决方案2:


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

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

蟒蛇3:

JS:

编辑 您将数据序列化两次,因此需要使用反斜杠,并且必须使用JSON.parse两次。因为您已经序列化了响应,所以可以简单地使用HttpResponse或response返回序列化的数据

解决方案1:

解决方案2:


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

我建议将其替换为,或者将其从查询解析为Python dict

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


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

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

我建议将其替换为,或者将其从查询解析为Python dict

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


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

使用print[{\model\:您将看不到斜杠。里面只有信息,而不是字符串的结尾。当我在javascript中解析数据时,它们消失了,但我无法从中提取任何数据创建显示它的最小工作代码。或者至少显示javascript代码使用打印[{\model\:您将看不到斜杠。里面只有信息,而不是字符串的结尾。当我用javascript解析数据时,它们消失了,但我无法从中提取任何数据。创建显示它的最小工作代码。或者至少显示javascript代码我尝试了JSON.parsedata,并给出了与您相同的输出,并尝试提取数据但是,我不能提取任何数据,或者它显示的是什么,或者显示的是你如何提取的?在MyARR VaabLeCnStR.Myal.MaDd=>D.FieldS中解析后,CARYMODEME NeWORD MyARR持有正确的值。如果是,那么检查地图可以如何以适当的方式使用。它应该是内容类型,而不是MimeType尝试JSON.PAR。Sasterta并给出与您相同的输出,并尝试提取数据,但我无法提取任何数据,无论其显示为“无”还是“显示为未定义”您如何提取?在myArr vaiableconst carModelsArr=myArr.mapd=>d.fields.car\u model\u newMyarr中解析后,请检查映射如何在适当的wa中使用y、 它应该是content_类型,而不是mimetype,正如您可以看到的,我对代码进行了注释,其中首先尝试在列表中解析它,但它会导致错误,我将研究DRF响应是否提供更好的结果。为了使用JsonResponse,您不需要序列化,这会将数据转换为JSON,而是直接将其解析为dict。就像这里所说的。在您的例子中,通过运行posts_serialized=serializers.serialize'json',model可以将它变成一个json,这在我看来是更正确的处理方式。我建议继续使用DRF并返回我建议的响应对象。正如您所见,我对代码进行了注释,试图首先在列表中对其进行解析,但它导致了错误
错误,我将研究DRF响应是否能提供更好的结果为了使用JsonResponse,您不需要序列化,这会将数据转换为JSON,而是直接将其解析为dict。就像这里所说的。在您的例子中,通过运行posts\u serialized=serializers.serialize'json',model可以使它成为一个json——在我看来,这是处理它的更正确的方法。我建议继续使用DRF并返回我建议的响应对象。
var myArr = JSON.parse(JSON.parse(this.responseText));
json.loads(response)
JSON.parse(data)
from django.http import HttpResponse
return HttpResponse(posts_serialized, content_type='application/json')
from rest_framework.response import Response
return Response(posts_serialized, content_type='application/json')