无法将字典对象转换为JSON对象

时间:2017-11-01 09:56:48

标签: python json django dictionary django-views

我想将我的字典对象转换为JSON,因为我需要在ReactJS文件中发送它。我的代码如下:

def get(self, request, pk, format = None):
    queryset = SocialAccount.objects.filter(provider='twitter').get(id=pk)
    user_id= queryset.uid
    name = queryset.extra_data['name']
    username = queryset.extra_data['screen_name']
    data = {'user_id':user_id,'name':name,'username':username}
    data = json.dumps(data)
    print(type(json.loads(data)))
    return Response(json.loads(data))

在这个视图中,我在“print(type(json.loads(data)))”行而不是JSON对象中得到了“class'dict'”。如果我出错了,请指导我。我需要做什么? 感谢。

2 个答案:

答案 0 :(得分:5)

成功制作了JSON 。你做错了是你再次解码 JSON,回到Python对象,你只测试了解码的结果。这是一个新的字典对象;您在data中生成并存储的JSON是有效的JSON,并且您已经证明它可以再次成功解码。

换句话说,不会再次解码。你已经拥有了JSON,只需返回:

data = {'user_id':user_id,'name':name,'username':username}
data = json.dumps(data)
return Response(data)

您可以通过返回JsonResponse object来简化此操作:

# at the top
from django.http import JsonResponse

# in your view
data = {'user_id':user_id,'name':name,'username':username}
return JsonResponse(data)

这也可以为您设置正确的内容类型。

答案 1 :(得分:4)

您可以使用JsonResponse代替响应:

def get(self, request, pk, format=None):
    # ...
    data = {'user_id': user_id,'name': name,'username': username}
    return JsonResponse(data)

您的问题是您使用json.loads(data)将数据转换回Python对象。相反,您只需要返回Response(data),但您应该更喜欢JsonResponse