Estoy usando la biblioteca de jackson para serializar/deserializar a/desde JSON. Necesito que este JSON tenga el tamaño más pequeño posible, así que habilité la característica ALLOW_UNQUOTED_FIELD_NAMES para eliminar todas las comillas. Sé que eliminar citas no es estándar, pero hacer json pequeño es un requisito difícil del proyecto. El JSON generado funciona, pero cuando he intentando leer el valor JSON que estoy recibiendo una excepción:ALLOW_UNQUOTED_FIELD_NAMES en la biblioteca jackson JSON
org.codehaus.jackson.JsonParseException: carácter inesperado ('9' (código 57)): esperaba nombre válido carácter (para el nombre sin comillas) o comillas dobles (para las citas) para iniciar nombre del campo en [Origen: [email protected]; línea: 1, columna: 3]
La excepción anterior se inicia cuando leí este json:
{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
La forma leí que es:
Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
y el objeto mapper que uso ambos para leer y escribir los valores es:
private static final ObjectMapper om = new ObjectMapper();
static {
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);
om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
Estoy usando la versión 1.6.3 de Jackson, tanto en el proyecto emisor como en el receptor. La versión necesaria para esta característica es 1.2+, así que pensé que tal vez no estaba usando esta versión, pero mi receptor es una aplicación de Spring y he comprobado que la biblioteca instalada en la carpeta libs es 1.6.3.
¿Qué puedo estar haciendo mal? Tal vez esta característica no se puede usar con mapas.
Tengo otra pregunta, hasta ahora solo estoy enviando un mapa donde la clave tiene solo un valor de uuid y el valor es un número. ¿Puedo tener algún problema si envío un valor con caracteres especiales con la característica ALLOW_UNQUOTED_FIELD_NAMES activada? Will jackson escapará de estos personajes?
Gracias.
Muy buen punto sobre Smile: puede ser compacto, esp. cuando se habilitan las referencias de valor de cadena (si hay muchos valores de cadena repetidos, como valores enumerados) – StaxMan