Estoy tratando de reemplazar una serialización personalizada JSON (de) en un proyecto groovy/grails con Jackson.Serialized JSON con claves clasificadas, usando Jackson
Tengo problemas para lograr que Jackson emita un JSON bastante impreso con claves ordenadas en un simple orden alfabético "natural". He intentado esto (y muchas variaciones):
mymap = [ ... ] // Some groovy map
def mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
def jsonstring = mapper.defaultPrettyPrintingWriter().writeValueAsString(mymap)
Pero Jackson genera tenazmente un JSON donde las claves parecen estar en un orden aleatorio. He intentado cambiar el tipo de 'mymap' con un TreeMap, y en ese caso todas las claves están correctamente ordenadas como se esperaba.
Me pregunto si hay una manera de obtener las claves ordenadas sin cambiando 'mymap' de arriba a un TreeMap (y recursivamente todos los valores de su mapa ...).
SORT_PROPERTIES_ALPHABETICALLY parece estar destinado a hacer precisamente eso, pero no lo hace por alguna razón. ¿Sabrías por qué es así? ¿Algo que estoy haciendo mal arriba?
He intentado con Jackson 1.8.3, 1.8.8 y 1.9.5, mismo resultado (claves aleatorias).
Buen punto, me perdí. Parece que debo olvidar la agradable y elegante forma de establecer una preferencia de serialización. –
Debería poder hacer: 'def jsonstring = mapper.defaultPrettyPrintingWriter(). WriteValueAsString (mymap as TreeMap)' ¿no? –
No, eso no ayuda. La implementación de 'mymap' no es TreeMap. E incluso si lo fuera, tendría que asegurarme de que todos los demás valores de mapa en 'mymap' también sean TreeMap, y ahí es donde se vuelve muy complicado. –