Разобрать плоский JSON в структуру вложенных объектов с Моши - PullRequest
0 голосов
/ 09 сентября 2018

Я работаю с API, который возвращает несколько ответов JSON, которые имеют общие поля данных между ними. Я использую Моши для десериализации ответов на объекты.

Например, скажем, ответ от одного вызова метода API имеет такую ​​структуру

class Book(
    val title: String,
    val genre: String,
    ...
    val authorName: String,
    val authorAge: Int,
    val authorCountry: String
}

И еще одна имеет эту структуру

class Article(
    val title: String,
    val subject: String,
    ...
    val authorName: String,
    val authorAge: Int,
    val authorCountry: String
}

Я ищу решение, позволяющее перемещать общие поля (например, сведения об авторе) в отдельный класс и обрабатывать его так, как если бы оно было получено из вложенной структуры JSON, тогда как фактический JSON получил из API остается неизменным и остается плоским.

class Book(
    val title: String,
    val genre: String,
    ...
    val author: Author
}

Я хочу сделать это, чтобы я мог:

  1. Рассматривать автора как отдельную сущность, когда это необходимо, без необходимости передать Book или Article объекты вокруг
  2. Избегайте дублирования полей Author

Текущие решения, о которых я могу подумать:

  1. Используйте промежуточный класс, как пример EventJson в документах Моши. Я хочу избежать этого, потому что мои классы данных довольно большие, и я пришлось бы дублировать все поля в промежуточном классе.
  2. Сделать подклассы классов Book и Article равными Author. я не нравится это, потому что книга не является автором и потому, что она не позволяет я рассматриваю автора как отдельную сущность.

Есть предложения?

1 Ответ

0 голосов
/ 09 сентября 2018

Я думаю, что подход EventJson будет проще поддерживать, даже если он требует много кода.

...