Recibiré una forma de cadena codificada JSON Obj-C, y estoy decodificando una cadena ficticia (por ahora) como el código a continuación. Mi salida sale con el carácter 'u' que antepone cada elemento:
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
¿Cómo está JSON agregando este char 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
Respuestas:
El prefijo u solo significa que tiene una cadena Unicode. Cuando realmente use la cadena, no aparecerá en sus datos. No se deje llevar por la salida impresa.
Por ejemplo, intente esto:
No verás una u.
fuente
u
s en sus datos. Francamente, imprimir unau
para indicar que es una cadena Unicode es uno de los peores errores sobre Python. Absolutamente ridículo. ¿Por qué no imprimir una
antes de cada cadena si es ASCII? ¿Yi
si es un número entero?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
fuente
La
d3
impresión a continuación es la que está buscando (que es la combinación de volcados y cargas) :)Teniendo:
Huellas dactilares:
fuente
json.dumps
convierte el dict nuevamente en una cadena (codificada con JSON). Eso no es lo que el OP quería hacer. -1.El
u
prefijo significa que esas cadenas son unicode en lugar de cadenas de 8 bits. La mejor manera de no mostrar elu
prefijo es cambiar a Python 3, donde las cadenas son unicode por defecto. Si esa no es una opción, elstr
constructor convertirá de unicode a 8 bits, así que simplemente haga un bucle recursivo sobre el resultado y conviertaunicode
astr
. Sin embargo, probablemente sea mejor dejar las cadenas como unicode.fuente
Unicode es un tipo apropiado aquí. Los documentos de JSONDecoder describen la tabla de conversión y establecen que los objetos de cadena json se decodifican en objetos Unicode
https://docs.python.org/2/library/json.html#encoders-and-decoders
"la codificación determina la codificación utilizada para interpretar cualquier objeto str decodificado por esta instancia (UTF-8 por defecto)".
fuente
Esos caracteres 'u' que se agregan a un objeto significa que el objeto está codificado en "unicode".
Si desea eliminar esos caracteres 'u' de su objeto, puede hacer esto:
Hagamos el pago desde Python Shell
fuente
Me encontré con este problema al intentar capturar datos JSON en el registro con la
logging
biblioteca de Python , para fines de depuración y solución de problemas. Obtener elu
personaje es una verdadera molestia cuando quieres copiar el texto y pegarlo en tu código en alguna parte.Como todo el mundo le dirá, esto se debe a que es una representación Unicode y,
json.loads()
en primer lugar , podría deberse al hecho de que ha utilizado para cargar los datos de una cadena.Si desea la representación JSON en el registro, sin el
u
prefijo, el truco es usarjson.dumps()
antes de cerrar la sesión. Por ejemplo:fuente
Prueba esto:
mail_accounts [0] .encode ("ascii")
fuente
Simplemente reemplace la u 'con una comilla simple ...
fuente