我尝试使用下面的代码将模型数据作为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
这是因为JsonResponse。正如您在文档odJsonResponse中看到的,它需要一个字典,而您已经创建了一个JSON字符串。我假设,由于您说
safe=False
,它接受了字符串我建议将其替换为DRF Response,或者将其从查询解析为Python dict(我更喜欢DRF响应选项)
有关更多信息,请查看链接中的文档
注意:我自己没有运行代码-这是我的假设
我认为序列化程序这样做是为了在dict对象周围加上双引号
"
,同时将它们转换为Json对象。可能那个dict对象已经有了包含相同双引号"
的键或值。因此出现了反斜杠如果使用Python则必须使用
json.loads
,否则JSON.parse
如果使用JSPython3:
JS:
编辑
您将数据序列化两次,因此使用了反斜杠,并被迫使用
JSON.parse
两次。因为您已经序列化了响应,所以可以简单地使用HttpResponse
或Response
返回序列化的数据解决方案-1:
解决方案-2:
相关问题 更多 >
编程相关推荐