Парсинг сложного Json в List

307
12 апреля 2017, 12:45

Дан вот такой Json-файл. Как добавить в коллекцию простой элемент в курсе, а вот как в коллекцию сунуть коллекцию, да ещё и сортировать его по одному из элементов я не в силах.

{
  "result": [
    {
      "hostid": "10106",
      "host": "Yandex DNS",
      "interfaces": [
        {
          "interfaceid": "9",
          "ip": "77.88.8.8"
        },
        {
          "interfaceid": "13",
          "ip": "77.88.8.8"
        }
      ]
    },
    {
      "hostid": "10106",
      "host": "Yandex DNS",
      "interfaces": [
        {
          "interfaceid": "6",
          "ip": "77.88.8.8"
        },        
      ]
    }
  }
}

Индекс коллекции должен совпадать со значением переменной interfaceid (это значение уникальное).

Answer 1

Тут две задачи.

  1. Превратить JSON в Java-объекты;
  2. Отсортировать полученные объекты по нужному критерию.

Для решения первой задачи можно использовать Google GSON. Эта библиотека позволяет конвертировать JSON в Java-объекты и обратно. Кроме Google GSON существуют и другие библиотеки, такие как Jackson итд.

Для решения второй задачи создайте класс, который реализует интерфейс Comparator.

В этом классе реализуйте метод compare(T o1, T o2), который будет сравнивать два объекта из вашего JSON и возвращать 1, если первый объект больше второго, 0 - если объекты равны и -1 если первый объект меньше второго.

После чего отсортируйте массив объектов, который вы получили из JSON с помощью вашего класса-компаратора, вызвав метод Collections.sort(list, comparator), где list - это ваш список объектов из JSON, а comparator - это ваша реализация интерфейса Comparator.

Есть и другой способ вместо создания отдельного компаратора. Это объявление объектов, список которых вы генерируете из JSON как Comparable. В таком случае вам надо будет реализовать в классе метод compareTo(T obj), который будет сравнивать текущий экземпляр класса с переданным в параметре (obj). После чего вызываете метод Collections.sort(list), где list - это список объектов, полученных из JSON, в котором каждый объект реализует интерфейс Comparable.

READ ALSO
Как узнать, кто использует класс?

Как узнать, кто использует класс?

На низком уровне нужно определить имя класса, который его используетВозможно ли это? Вижу решение в передаче имени в конструктор, но это мне...

232
Можно ли с помощью Java нажать кнопку на сайте?

Можно ли с помощью Java нажать кнопку на сайте?

Здравствуйте,допустим на этом сайте я хочу с помощью java нажать на кнопку-"Задать вопрос"По средствам чего это можно сделать и можно ли вообще?

315
Как выделить дни в Calendar View?

Как выделить дни в Calendar View?

Добрый день! Есть задача: выделять определенные дни цветамиОдин день я выделить цветом могу,а вот несколько

266
Какая разница между execute() и submit() у ExecutorService?

Какая разница между execute() и submit() у ExecutorService?

У ExecutorService есть два метода:

236