2014-10-06 3 views
-2

В журналах я печатаю словарь преобразованного в строкукак преобразовать строку в словарь в Python

Выхода в журнале:

{'email': 'brian-o'[email protected]'} 

Тогда я пытаюсь преобразовать эту строку обратно в Словарь.

print json.loads(my_str) 

Это ошибка я получил:

simplejson.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 1 (char 1) 

Как избежать этой строки без потери одинарной кавычки в электронной почте?

+0

Как вы напечатали это в журнале? Это не JSON, и вы не должны ожидать, что 'json.loads' сможет его прочитать. – geoffspear

+0

У вас устал '\ ''? – Csanesz

+0

@Wooble, согласился, это не json. Любое решение, чтобы преобразовать его в словарь? – neymer

ответ

-1

Вы вводите неверные данные. Искушение жалуется на это «Ожидание названия свойства, заключенного в двойные кавычки: строка 1 столбец 1». Вы вводите: {'email': 'brian-o'[email protected]'}. Это не соответствует синтаксису python.

+0

Он подходит для синтаксиса python. Например. Я могу напечатать эту строку. Нет ошибок – neymer

+0

вы можете пастеризовать все, что вы кодируете (часть включает в себя определение и печать мистера и json.loads)? – kevin

1

Ваш пример недействителен JSON, поскольку для включения пар ключ-значение допускаются только двойные кавычки. Действительная строка JSON должна выглядеть '{"email": "brian-o\'[email protected]"}'

Если бы я взять исходную строку, она может быть преобразована в правильный формат этот причудливый способ:

import ast, json 

s = "{'email': 'brian-o\\'[email protected]'}" 
# note nested apostrophe need to be escaped for literal parsing 

valid_s = json.dumps(ast.literal_eval(s)) 
# we have valid json string now '{"email": "brian-o\'[email protected]"}' 

# Now we can get python's dictionary back 
d = json.loads(valid_s) # {u'email': u"brian-o'[email protected]"} 
d['email']    # u"brian-o'[email protected]" 
+0

Конечно, я могу это сделать. Мой вопрос заключается в том, как заставить эту строку (и любые другие строки такого рода) работать – neymer

+1

Без хрустального шара или вашего кода показано, как * «В журналах вы печатаете словарь, преобразованный в строку» *, невозможно ответить на вопрос. Я просто догадываюсь, что вы неправильно называете '__str__' или' __repr__' вместо 'json.dumps'. Тогда вы не можете ожидать, что обратный 'json.loads' будет работать. –

0

Попробуйте так: -

>>> import ast 
>>> ast.literal_eval("{'email': 'brian-o\\'[email protected]'}") 
{'email': 'brian-o [email protected]'} 
+0

Вы предлагаете мне бежать «вручную? Не вариант, это часть скрипта – neymer

+0

Ohk, тогда выше не будет работать в этом случае :( –

Смежные вопросы