Pregunta Cadena al diccionario en Python


Así que he dedicado mucho tiempo a esto, y me parece que debería ser una solución simple. Intento utilizar la Autenticación de Facebook para registrar usuarios en mi sitio, y estoy tratando de hacerlo desde el lado del servidor. Llegué al punto donde obtengo mi token de acceso y cuando voy a:

https://graph.facebook.com/me?access_token=MY_ACCESS_TOKEN

Obtengo la información que estoy buscando como una cadena que es así:

{"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"}

Parece que debería ser capaz de usar dict(string) en esto, pero estoy recibiendo este error:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

Así que traté de usar Pickle, pero obtuve este error:

KeyError: '{'

Intenté usar django.serializers para deserializarlo pero tuvo resultados similares. ¿Alguna idea? Siento que la respuesta tiene que ser simple, y solo estoy siendo estúpido. ¡Gracias por cualquier ayuda!


73
2018-02-06 23:44


origen


Respuestas:


Esta información es JSON! Puedes deserializarlo usando el built-in json módulo si estás en Python 2.6+, de lo contrario puedes utilizar el excelente tercero simplejson módulo.

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

151
2018-02-06 23:51



Utilizar ast.literal_eval para evaluar los literales de Python Sin embargo, lo que tienes es JSON (nota "verdadera" por ejemplo), así que utiliza un deserializador 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'}

15
2018-02-06 23:49