web-dev-qa-db-ja.com

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を使用してデシリアライズしましたが、同様の結果が得られました。何かご意見は?答えはシンプルである必要があり、ただ愚かだと感じています。助けてくれてありがとう!

100
LunaCodeGirl

このデータは JSON ! Python 2.6以降を使用している場合は、組み込みの json module を使用してデシリアライズできます。パーティー 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

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