Строка для словаря в 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 для де-сериализации, но имел аналогичные результаты. Есть предположения? Я чувствую, что ответ должен быть простым, и я просто глуп. Спасибо за любую помощь!

Ответ 1

Эти данные JSON! Вы можете десериализовать его с помощью встроенного json модуля, если вы находитесь на Python 2.6+, иначе вы можете использовать отличную стороннюю simplejson module.

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

Ответ 2

Используйте ast.literal_eval для оценки литералов 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'[email protected]', 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'}