Python: json.loads devuelve elementos con el prefijo 'u'

Resuelto janeh asked hace 11 años • 9 respuestas

Recibiré una cadena codificada en JSON de Objective-C y estoy decodificando una cadena ficticia (por ahora) como el siguiente código. Mi salida aparece con el carácter 'u' precediendo cada elemento:

[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...

¿Cómo agrega JSON este carácter Unicode? ¿Cuál es la mejor manera de eliminarlo?

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
janeh avatar Dec 19 '12 02:12 janeh
Aceptado

El prefijo u- simplemente significa que tienes una cadena Unicode. Cuando realmente uses la cadena, no aparecerá en tus datos. No se deje sorprender por el resultado impreso.

Por ejemplo, prueba esto:

print mail_accounts[0]["i"]

No verás una u.

Ned Batchelder avatar Dec 18 '2012 19:12 Ned Batchelder

Todo está bien, hombre. La 'u' es algo bueno, indica que la cadena es de tipo Unicode en Python 2.x.

http://docs.python.org/2/howto/unicode.html#the-unicode-type

Aman avatar Dec 18 '2012 19:12 Aman