Подтвердить что ты не робот

Как мне избавиться от "u" от декодированного объекта JSON?

У меня есть словарь словарей в Python:

d = {"a11y_firesafety.html":{"lang:hi": {"div1": "http://a11y.in/a11y/idea/a11y_firesafety.html:hi"}, "lang:kn": {"div1": "http://a11y.in/a11ypi/idea/a11y_firesafety.html:kn}}}

У меня это в файле JSON, и я закодировал его с помощью json.dumps(). Теперь, когда я декодирую его с помощью json.loads() в Python, я получаю такой результат:

temp = {u'a11y_firesafety.html': {u'lang:hi': {u'div1': u'http://a11y.in/a11ypi/idea/a11y_firesafety.html:hi'}, u'lang:kn': {u'div1': u'http://a11y.in/a11ypi/idea/a11y_firesafety.html:kn'}}}

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

4b9b3361

Ответ 1

Почему вас волнуют персонажи "u"? Это всего лишь визуальный индикатор; если вы фактически не используете результат str(temp) в своем коде, они не влияют на ваш код. Например:

>>> test = u"abcd"
>>> test == "abcd"
True

Если они по какой-то причине имеют значение, и вы не заботитесь о таких последствиях, как неспособность использовать этот код в международной настройке, тогда вы можете передать пользовательский object_hook (см. json docs здесь) для создания словарей со строковым содержимым, а не с unicode.

Ответ 2

Вы также можете использовать это:

import fileinput

fout = open("out.txt", 'a')

for i in fileinput.input("in.txt"):

   str = i.replace("u\"","\"").replace("u\'","\'")

   print >> fout,str

Типичные ответы json от стандартных веб-сайтов имеют эти два кодирующих представления - u 'и u " Этот фрагмент избавляется от обоих. Это может не потребоваться, поскольку эта кодировка не препятствует какой-либо логической обработке, как упоминалось предыдущим комментатором

Ответ 3

Нет кодировки "unicode", поскольку unicode - это другой тип данных, и я действительно не вижу никакой причины, по которой unicode будет проблемой, поскольку вы всегда можете преобразовать его в строку, например. foo.encode('utf-8').

Однако, если вы действительно хотите иметь строковые объекты, вы должны создать собственный класс декодера и использовать его при декодировании JSON.