2012-07-13 66 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为我工作