2012-07-13 54 views
0

我想一個字符串,它是這樣的轉換:使用Unicode字符串轉換成字典在Python

{u'confirm_token': u'98c21e111f25550943e29e34e65ae1dd71968ff652cb933c2f998e4f', 
u'confirmed_account': False, u'confidential': {}, u'contacts': [], 
u'_id': ObjectId('4e0a761d7c93dd25bc000021'), u'settings': {u'email': u''}, 
u'here': [], u'creation_date': datetime.datetime(2011, 6, 29, 2, 47, 25), 
u'profil': {u'gender': u'Male', u'first_name': u'Test', u'last_name': u'Test', 
u'email_address': u'[email protected]', u'photo': u'picture.png'}, 
u'attending': [], u'requests': [], 
u'password': u'b04b55d5f4555e5d7252e7f74aaf4dc538639fa6864f3d8004c61635'} 

在Python字典。我實際上試圖使用函數json.load(),但由於每個鍵和值之前的Unicode,它不起作用。有誰知道該怎麼做?

+0

你從哪裏得到這種類型的字符串? – 2012-07-13 16:52:44

+0

'eval'?你從哪裏得到這個字符串? – geoffspear 2012-07-13 16:52:48

+0

我在API請求的主體中檢索它 – kschaeffler 2012-07-13 16:54:15

回答

3

將其轉換爲Python對象的唯一簡單方法是使用eval()(假設ObjectId是一些有效的Python類)。如果字符串來自可信來源,這將只是一個選項。更安全的功能ast.literal_eval()不適用於這種情況 - 它不能評估ObjectId()呼叫。

你應該真的試着解決你得到這個字符串的任何問題,以使用一個理智的序列化格式。

+3

應明確指出,使用eval()是邪惡的,應該避免。 – 2012-07-13 17:02:46

1

ast.literal_eval()(或者更確切地說它的實現)會讓你在大多數那裏的方式。剩下的就是走AST去適當地取代ObjectId()

-1

爲什麼不能split這個字符串,然後存儲在字典中。我有同樣的問題,既不eval或literal_eval爲我工作