it-swarm.com.de

String zum Dictionary in Python

Ich habe viel zu viel Zeit damit verbracht, und es scheint mir, dass es eine einfache Lösung sein sollte. Ich versuche, die Facebook-Authentifizierung zu verwenden, um Benutzer auf meiner Website zu registrieren, und ich versuche, dies serverseitig zu tun. Ich bin an dem Punkt angelangt, an dem ich mein Zugriffstoken erhalte, und wenn ich gehe zu:

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

Ich erhalte die Informationen, nach denen ich suche, als Zeichenfolge, die so aussieht:

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

Anscheinend sollte ich nur dict(string) verwenden können, aber ich erhalte den folgenden Fehler:

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

Also habe ich es mit Pickle versucht, habe aber folgenden Fehler bekommen:

KeyError: '{'

Ich habe versucht, es mit Django.serializers Zu de-serialisieren, hatte aber ähnliche Ergebnisse. Irgendwelche Gedanken? Ich denke, die Antwort muss einfach sein und ich bin nur dumm. Danke für jede Hilfe!

100
LunaCodeGirl

Diese Daten sind JSON ! Sie können es mit dem eingebauten json-Modul deserialisieren , wenn Sie mit Python 2.6+) arbeiten, andernfalls können Sie den ausgezeichneten Drittanbieter verwenden 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
194
Cameron

Verwenden Sie ast.literal_eval , um Python= Literale auszuwerten. Was Sie jedoch haben, ist JSON (z. B. "true"). Verwenden Sie daher einen JSON-Deserialisierer.

>>> 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'}
16
Fred Nurk