Модернизация: возможно ли сопоставить «Литеральный объект», используемый в качестве карты, с POJO? - PullRequest
0 голосов
/ 11 июня 2019

Единственный способ, которым я нашел сериализацию списков "не от 0 до n" (например, массивов "не от 0 до n", которые вы можете использовать в PHP) в формат JSON, это сделать что-то вроде этого:

{
  "one": 1,
  "two": 2,
  "three": 3
}

... просто чтобы перейти прямо к сути простым способом. На самом деле, моя проблема немного сложнее.

Я отправляю некоторые данные, и мне нужно индексировать списки по идентификатору. Каждое значение является одновременно другим «литеральным объектом», но все они имеют одинаковую структуру. Как:

{
    "array_list_1": {
        "3": {"name": "John", "age": 24},
        "5": {"name": "Kale", "age": 23},
        "8": {"name": "Laura", "age": 22},
    },
    "array_list_2": {
        "13": {"name": "Mike", "age": 27},
        "21": {"name": "Nikolai", "age": 34},
        "34": {"name": "Oscar", "age": 23},
    },
    "manifold_array" = [55,89]
}

Когда я получаю данные в формате, как показано выше, в моем приложении для Android с использованием только OkHttp, я просто преобразовываю каждый список в JsonObject с использованием библиотеки org.json.JSONObject. Но теперь я рефакторинг, чтобы использовать вместо этого Retrofit, и мне нужно создать POJO для обработки этого формата в ApiClient с Retrofit.

В подобных случаях каков будет правильный способ представления этих "не 0-в-n-массивов" в POJO таким образом, что свойство array_list_1 может быть представлено как (например) LinkedHashMap<Integer, PersonPojo> и совместимость с Retrofit?

1 Ответ

0 голосов
/ 11 июня 2019

Совместимо ли это с Retrofit?

Retrofit не отвечает за отображение POJO / List / Map GsonConverterFactory.create(), которое передается методу builder, который делает Retrofit. И ДА это абсолютно хорошо для вызова карт.

Вышеуказанное JSON structure может быть представлено следующей структурой данных: -

LinkedHashMap<String, LinkedHashMap<String, PersonPojo>> map

Где PersonPojo обозначает: -

{"name": "Mike", "age": 27}
...