【问题标题】:Unable to convert dictionary object to JSON object无法将字典对象转换为 JSON 对象
【发布时间】:2018-04-13 14:44:08
【问题描述】:

我想将我的字典对象转换为 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)))”行中得到了“class 'dict'”而不是 JSON 对象。如果我错了,请指导我。我需要做什么? 谢谢。

【问题讨论】:

标签: python json django dictionary django-views


【解决方案1】:

成功生成了 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)

这还负责为您设置正确的内容类型。

【讨论】:

  • 谢谢你,先生,帮助我。但是在这里,如果我打印 type(json.dumps(data)),它会给出“class 'str'”。
  • @Great_DR:是的,JSON 文档存储在 str 对象中。这是正确。尝试打印值本身。
  • 是的,先生,我很欣赏您的回答,但我在所有字符串中都有额外的“/”。我已经检查了邮递员。所以它不是真正的 JSON 对象。
  • @Great_DR:相信 json 编码器,相信 Python。 json.dumps() 函数执行它在锡上所说的,它不会添加输​​入数据结构中尚不存在或使文档有效 JSON 所需的额外字符。例如,查看视图在浏览器中返回的内容,或者使用在线 JSON 验证器来查看该值是否确实是有效的 JSON 文档。
【解决方案2】:

您可以使用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

【讨论】:

  • 好答案!为什么在使用像 Django 这样的框架时会变得复杂。别傻了,用工具!
  • @cezar 是的先生,但我想在 ReactJS 文件中使用“user_id”。所以我很困惑这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多