Django JSONResponse返回一个字符串而不是JSON

时间:2018-08-28 20:55:17

标签: django python-3.x

我正在使用Django视图返回JSON对象。但是,当我使用下面的方法时,我得到的是字典的字符串表示形式,而不是JSON对象。

def api_dataset_index(request):
    upload_file = request.FILES.get('file')
    if upload_file:
        config_str = upload_file.read().decode("utf-8")
        d = Dataset.from_yaml(config_str)
        return JsonResponse(model_to_dict(d))

响应-"{\"id\": 31, \"name\": \"effort\", \"description\": \"Expressions of customer effort or ease.\", \"multilabeled\": false}"

我在这里做错什么了吗?还是应该使用JSONResponse返回字符串?

编辑-

字符串是有效的json表示形式。但是,django.http方法“ JsonResponse”的内容类型是作为字符串而不是作为对象发送的。如果传递给JsonResponse()方法的结构是一个列表,则编码正确完成,也就是说,客户端将其作为json对象而不是字符串接收。

Edit2

证明我遇到的问题与客户端代码有关。

2 个答案:

答案 0 :(得分:1)

这是JSON对象的字符串表示形式,应该是返回的内容。在客户端,您可以通过使用以下内容解析它来从中创建一个JSON对象:

var jsonObj = JSON.parse(response)

请在此处W3Schools JSON.parse()或此处MDN JSON.parse()

查看重复说明。

答案 1 :(得分:0)

尝试一下:

import json    

def getObjects():
   objects = ...
   return JsonResponse(json.loads(objects))

您应该已经确定该方法返回的是json而不是String