2017-02-22 12 views
0

Я пытаюсь сгенерировать строку JSON из Map в отсортированном порядке значения элемента json. Вот мой JSONJson, сгенерированный через Jackson, должен находиться в отсортированном порядке значения элементов Json.

"customer": { 
     "id": "168252733", 
     "firstName": "OTP", 
     "lastName": "KPI", 
     "contact": { 
     "emailAddress": "[email protected]", 
     "phone": [ 
      { 
      "number": "2567775065", 
      "type": "primary" 
      }, 
      { 
      "number": "2567775065", 
      "type": "secondary" 
      } 
     ] 
     } 
    } 

Это может Json содержит несколько записей о клиентах, но я хочу, чтобы JSON генерироваться должны быть в отсортированном порядке либо Firstname, фамилия или адрес электронной почты в зависимости от предпочтений пользователя.

Я новичок в JACKSON, не знаю, как его реализовать. Может ли кто-нибудь помочь мне в этом. Спасибо заранее.

+1

Самый простой способ - отсортировать список или массив, прежде чем сериализовать его. –

+0

Спасибо за ответ Jo. Но я не хочу сортировать список. Разве это не может быть сделано Джексоном. –

+0

Я думаю, вы могли бы использовать [сериализатор клиента] (http://wiki.fasterxml.com/JacksonHowToCustomSerializers) для копирования и сортировки списка во время сериализации. Трюк будет пытаться получить доступ к вашим предпочтениям пользователей внутри сериализатора. –

ответ

1

Вариант 1:

Простой способ будет использовать Arrays.sort(T[] a, Comparator<? super T> c) для сортировки списка клиентов на основе предпочтений пользователя до сериализации.

Вам нужно создать Компараторы для каждого предпочтения пользователя, а затем использовать Arrays.sort(customerList, firstNameComparator)

Вариант 2:

Если вы хотите отсортированный список клиентов из JSON, то вам необходимо зарегистрировать пользовательский десериализатор и ваш CustomerListDeserializer генерировать отсортированный список Заказчиков

SimpleModule simpleModule = new SimpleModule().addDeserializer(CustomerList.class, new CustomerListDeserializer()); 
     mapper.registerModule(smipleModule); 

Вариант 3:

Fi сначала десериализуем в список объектов клиента, а затем примените сортировку.

Смежные вопросы