Python 中字符串到字典

所以我花了很多时间在这上面,在我看来,这应该是一个简单的解决方案。我正在尝试使用 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反序列化它,但是得到了类似的结果。有什么想法吗?我觉得答案应该很简单,我太傻了。谢谢你的帮助!

272630 次浏览

使用 文字评估评估 Python 文本。但是,您拥有的是 JSON (例如注意“ true”) ,因此使用 JSON 反序列化器。

>>> import json
>>> s = """{"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"}"""
>>> json.loads(s)
{u'first_name': u'John', u'last_name': u'Doe', u'verified': True, u'name': u'John Doe', u'locale': u'en_US', u'gender': u'male', u'email': u'jdoe@gmail.com', u'link': u'http://www.facebook.com/jdoe', u'timezone': -7, u'updated_time': u'2011-01-12T02:43:35+0000', u'id': u'123456789'}

这个数据是 JSON!如果使用 Python 2.6 + ,可以使用内置的 json模块对其进行反序列化,否则可以使用优秀的第三方 simplejson模块

import json    # or `import simplejson as json` if on Python < 2.6


json_string = u'{ "id":"123456789", ... }'
obj = json.loads(json_string)    # obj now contains a dict of the data

在 Python3.x 中

import json
t_string = '{"Prajot" : 1, "Kuvalekar" : 3}'
res = json.loads(t_string)
print(res) # <dict>  {"Prajot" : 1, "Kuvalekar" : 3}