kschaeffler
kschaeffler

Reputation: 4203

Convert strings with Unicode to dictionary in Python

I want to convert a string which is like that:

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

to a dictionary in Python. I actually tried to use the function json.load() but it doesn't work because of the Unicode before each keys and values. Does anyone know how to do it?

Upvotes: 0

Views: 3432

Answers (3)

Shagun Sodhani
Shagun Sodhani

Reputation: 3727

Why not split up this string and then store in dictionary. I had the same problem and neither of eval or literal_eval worked for me

Upvotes: -1

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

ast.literal_eval() (or rather its implementation) will get you most of the way there. The rest will be walking the AST to replace the ObjectId() call appropriately.

Upvotes: 1

Sven Marnach
Sven Marnach

Reputation: 601539

The only easy way to transform this into a Python object is to use eval() (provided ObjectId is some valid Python class). This will only be an option if the string is from a trusted source. The more secure function ast.literal_eval() won't work for this case – it can't evaluate the ObjectId() call.

You should really try to fix whatever you get this string from to use a sane serialisation format.

Upvotes: 3

Related Questions