Я хотел бы знать, можно ли создать объект JSON с помощью JsonSerializer от Jackson, где свойства упорядочены по значению (не по ключу). Например:Сериализовать свойства объекта в пользовательском порядке с помощью Jackson
{
"property2": 320,
"property1": 287,
"property4": 280,
"property3": 123,
...
}
Я пытался создать его создания пользовательского JsonSerializer как это:
public class MySerializer extends JsonSerializer<Map<String, Long>> {
@Override
public void serialize(Map<String, Long> t, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
List<Entry<String, Long>> list = new ArrayList<>(t.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Long>>() {
@Override
public int compare(Map.Entry<String, Long> o1, Map.Entry<String, Long> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
jg.writeStartObject();
for(Entry<String, Long> entry : list) {
jg.writeNumberField(entry.getKey(), entry.getValue());
}
jg.writeEndObject();
}
}
Но JSON генерируется не отсортирован по стоимости недвижимости, Джексон должен быть разупорядочения снова свойства объекта. Есть ли способ достичь этого?
EDIT: Проблемы была не с Джексоном, но с приложением я использовал для извлечения JSON (CocoaRestClient), который изменяет порядок следования свойств в сгенерированном объекте. И мой подход, и @m.aibin's являются правильными. Если у вас есть подобная проблема, проверьте, что проблема не в приложении, которое вы используете для извлечения JSON.
Порядок свойств не имеет значения, за исключением, может быть * * в целях удобочитаемости человека. –