【发布时间】:2011-06-22 11:12:18
【问题描述】:
所以我在这方面花了很多时间,在我看来这应该是一个简单的解决方法。我正在尝试使用 Facebook 的身份验证在我的网站上注册用户,并且正在尝试在服务器端进行。我已经到了获得访问令牌的地步,当我去的时候:
https://graph.facebook.com/me?access_token=MY_ACCESS_TOKEN
我得到的信息是这样的字符串:
{"id":"123456789","name":"John Doe","first_name":"John","last_name":"Doe","link":"http:\/\/www.facebook.com\/jdoe","gender":"male","email":"jdoe\u0040gmail.com","timezone":-7,"locale":"en_US","verified":true,"updated_time":"2011-01-12T02:43:35+0000"}
看来我应该只能在此使用dict(string),但我收到了这个错误:
ValueError: dictionary update sequence element #0 has length 1; 2 is required
所以我尝试使用 Pickle,但收到此错误:
KeyError: '{'
我尝试使用django.serializers 对其进行反序列化,但结果相似。有什么想法吗?我觉得答案必须很简单,而我只是愚蠢。感谢您的帮助!
【问题讨论】:
-
如果您想将字符串作为 Python 进行评估,您可能需要更改您的字符串:
"verified":true失败,除非定义了true。或者你可以使用"verified":True,或"verified":"true"。 -
@Matt:我怀疑他可以改变 graph.facebook.com 的输出格式。
-
@Fred:鉴于问题的标题(“Python 中的字符串到字典”),我猜他可以在调用
ast.literal_eval()之前将其从 Python 更改。不过,您的(修改后的)答案是正确的 - JSON 反序列化器是更好的解决方案。 -
@MattCurtis:以稳健的方式(在 ast.literal_eval 之前)更改它首先需要将其解析为 JSON。我提到 ast.literal_eval 是执行 OP 尝试对 dict(some_string) 执行的操作的正确方法。
-
@Fred:我想我们同意了 :-)
标签: python string json facebook dictionary