2013-03-24 4 views
7

Я хочу, чтобы иметь словарь изПреобразование строки в словарь питона

>>> page_detail_string = urllib2.urlopen("http://graph.facebook.com/Ideas4India").read() 

Он возвращает строку, как

>>> page_detail_string 
'{"about":"Ideas for development of India","category":"Community","description":"Platform where you can discuss and share your ideas which you think might help in betterment of our country.\\nPlease respect other community members and do not talk politics here.","is_published":true,"talking_about_count":0,"username":"Ideas4India","were_here_count":0,"id":"250014455083430","name":"Ideas 4 India","link":"http:\\/\\/www.facebook.com\\/Ideas4India","likes":23}' 

Теперь я хочу, чтобы преобразовать его в словарь, который я легко может быть сделано используя ast.literal_eval

>>> import ast 
>>> dict_page = ast.literal_eval(page_detail_string) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval 
return _convert(node_or_string) 
File "/usr/lib/python2.7/ast.py", line 63, in _convert 
in zip(node.keys, node.values)) 
File "/usr/lib/python2.7/ast.py", line 62, in <genexpr> 
return dict((_convert(k), _convert(v)) for k, v 
File "/usr/lib/python2.7/ast.py", line 79, in _convert 
raise ValueError('malformed string') 

, но я думаю, что он выдает эту ошибку из-за

"is_published":true 

Есть ли способ, который я могу преобразовать в словарь, разделив над ключом и значением («is_published»: true).

Благодаря

ответ

18

Что вы получите строку JSON, вы Shoule использовать json.loads для преобразования Сыроватского

import json 
json.loads(page_detail_string) 
7

Используйте json module:

In [1]: s = '{"about":"Ideas for development of India","category":"Community","description":"Platform where you can discuss and share your ideas which you think might help in betterment of our country.\\nPlease respect other community members and do not talk politics here.","is_published":true,"talking_about_count":0,"username":"Ideas4India","were_here_count":0,"id":"250014455083430","name":"Ideas 4 India","link":"http:\\/\\/www.facebook.com\\/Ideas4India","likes":23}' 

In [2]: import json 

In [3]: json.loads(s) 
Out[3]: 
{u'about': u'Ideas for development of India', 
u'category': u'Community', 
u'description': u'Platform where you can discuss and share your ideas which you think might help in betterment of our country.\nPlease respect other community members and do not talk politics here.', 
u'id': u'250014455083430', 
u'is_published': True, 
u'likes': 23, 
u'link': u'http://www.facebook.com/Ideas4India', 
u'name': u'Ideas 4 India', 
u'talking_about_count': 0, 
u'username': u'Ideas4India', 
u'were_here_count': 0} 

Кроме того, к сведению что вы можете использовать json.load (вместо json.loads) непосредственно на файл объекта:

In [4]: import urllib2 

In [5]: json.load(urllib2.urlopen("http://graph.facebook.com/Ideas4India")) 
Out[5]: 
{u'about': u'Ideas for development of India', 
u'category': u'Community', 
u'description': u'Platform where you can discuss and share your ideas which you think might help in betterment of our country.\nPlease respect other community members and do not talk politics here.', 
u'id': u'250014455083430', 
u'is_published': True, 
u'likes': 23, 
u'link': u'http://www.facebook.com/Ideas4India', 
u'name': u'Ideas 4 India', 
u'talking_about_count': 0, 
u'username': u'Ideas4India', 
u'were_here_count': 0}