Estoy tratando de decodificar la salida JSON de un programa Java (jackson) y tengo algunos problemas. La causa del problema es el siguiente fragmento:

{
    "description": "... lives\uMOVE™ OFFERS ",
}

Lo que causa ValueError: Invalid \uXXXX escape.

¿Alguna idea sobre cómo solucionar este problema?

EDITAR: La salida es de un archivo Avro, el paquete Avro usa jackson para emitir registros como JSON.
EDIT2: después de hurgar en los archivos de origen, podría ser el caso de que el JSON se construye manualmente (lo siento, Jackson).

3
lazy1 14 jul. 2011 a las 21:24

5 respuestas

La mejor respuesta

Este es un error conocido en las versiones de Avro <1.6.0. Consulte AVRO-851 para obtener más detalles.

0
pawstrong 5 sep. 2011 a las 06:12

Básicamente la entrada no es válida json.

La especificación en http://www.json.org/ define cómo se deben codificar las cadenas. Tendrá que arreglar la salida JSON de la otra aplicación.

1
Gareth Davis 14 jul. 2011 a las 17:41

Jackson actualmente no tiene una función de configuración para permitir la aceptación de dicha entrada. (¿Se generó con Jackson?)

Puede modificar el analizador de flujo para manejarlo. Siga el seguimiento de la pila a los métodos que necesitarían cambiar.

Puede enviar una solicitud de cambio en http://jira.codehaus.org/browse/JACKSON para Jackson se mejorará para proporcionar dicha función, aunque no estoy seguro de cuán popular sería la solicitud y si alguna vez se implementaría.

0
Programmer Bruce 14 jul. 2011 a las 18:06

¿Cómo se supone que se verá la cuerda original? \uXXXX es una secuencia de escape unicode, por lo que interpreta \ uMOVE como un solo carácter, pero no es un valor unicode válido. Siempre se supone que JSON es unicode, por lo que es probable que deba arreglar la cadena en la aplicación de origen

4
dfb 14 jul. 2011 a las 17:31

Intenta citar la \u así:

{
    "description": "... lives\\uMOVE™ OFFERS ", 
}
1
Rich 14 jul. 2011 a las 17:36