Я получу JSON-кодированную строку Obj-C, и я декодирую фиктивную строку (пока), как показано ниже. Мой вывод выходит с символом 'u', префиксом каждого элемента:
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
Как JSON добавляет этот юникод-символ? Какой лучший способ удалить это?
mail_accounts = []
da = {}
try:
s = '[{"i":"imap.gmail.com","p":"aaaa"},{"i":"imap.aol.com","p":"bbbb"},{"i":"333imap.com","p":"ccccc"},{"i":"444ap.gmail.com","p":"ddddd"},{"i":"555imap.gmail.com","p":"eee"}]'
jdata = json.loads(s)
for d in jdata:
for key, value in d.iteritems():
if key not in da:
da[key] = value
else:
da = {}
da[key] = value
mail_accounts.append(da)
except Exception, err:
sys.stderr.write('Exception Error: %s' % str(err))
print mail_accounts
Ответы:
Префикс u означает, что у вас есть строка Unicode. Когда вы действительно используете строку, она не появится в ваших данных. Не поддавайтесь распечатке.
Например, попробуйте это:
Вы не увидите вас.
источник
u
s в ваших данных. Честно говоря, распечатка,u
указывающая, что это строка в Юникоде, является одной из худших ошибок в Python. Совершенно нелепо Почему бы не печататьa
перед каждой строкой, если это ASCII? Аi
если это целое число?Все круто, чувак. 'U' - хорошая вещь, это означает, что строка имеет тип Unicode в python 2.x.
http://docs.python.org/2/howto/unicode.html#the-unicode-type
источник
d3
Ниже печать является тот , который вы ищете (это сочетание свалок и нагрузок) :)Наличие:
Печать:
источник
json.dumps
преобразует dict обратно в (JSON-кодированную) строку. Это не то, что хотел сделать ОП. -1.В
u
префиксе означает , что эти строки Юникод , а не 8-битовые строки. Лучший способ не показыватьu
префикс - это переключиться на Python 3, где строки по умолчанию имеют юникод. Если это не вариант,str
конструктор преобразует Unicode в 8-битный код, поэтому просто рекурсивно зацикливайте результат и преобразуйтеunicode
вstr
. Однако, вероятно, лучше всего оставить строки как Unicode.источник
Unicode является подходящим типом здесь. Документы JSONDecoder описывают таблицу преобразования и указывают, что строковые объекты json декодируются в объекты Unicode
https://docs.python.org/2/library/json.html#encoders-and-decoders
msgstr "кодировка определяет кодировку, используемую для интерпретации любых str-объектов, декодированных этим экземпляром (UTF-8 по умолчанию)."
источник
Эти символы 'u', добавляемые к объекту, означают, что объект закодирован в "Unicode".
Если вы хотите удалить эти символы 'u' из вашего объекта, вы можете сделать это:
Давайте извлекать из оболочки Python
источник
Я продолжал сталкиваться с этой проблемой при попытке записать данные JSON в журнал с
logging
библиотекой Python для целей отладки и устранения неполадок. Получениеu
символа - это настоящая неприятность, когда вы хотите скопировать текст и вставить его в свой код где-нибудь.Как все скажут вам, это потому, что это представление в Юникоде, и это может быть связано с тем, что вы использовали
json.loads()
для загрузки данных из строки в первую очередь.Если вам нужно представление JSON в журнале без
u
префикса, нужно использовать хитростьjson.dumps()
перед выходом из системы. Например:источник
Попробуй это:
mail_accounts [0] .encode ( "ASCII")
источник
Просто замените u 'одинарной кавычкой ...
источник