Как мне избавиться от "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"?
Ответы
Ответ 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.