Retrofit и MediaWIkiAPI, как получить содержимое страницы со странным ключевым именем в json? - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок в Android - kotlin, retrofit, rxjava - и создаю «класс данных» для использования при модернизации для получения страниц в MediaWiki.

мой код:

data class  WikiArticleResult (val result : List<WikiArticleModel>)
data class  WikiArticleModel (val revid: Int,
                          @SerializedName("pageid") val id: Int,
                          @SerializedName("title") val titleContent: String,
                          @SerializedName("text") val contentHtml: List<ContentWikiPage>,
                          val summary: String
                    )
data class ContentWikiPage (val Content: String, val images: List<ImagesWiki> )

data class ImagesWiki (val images: String)

Пример MediaWiki API Json:

api.php?action=parse&format=json&pageid=30&prop=text&utf8=1

результаты:

{
"parse": {
"title": "Article Title in MediaWiki Example",
"pageid": 30,
"text": {
  "*": "<table align=\"center\" class=\"noprint\" style=\"width:75%; margin:0 auto; border-collapse:collapse; background: #fbfbfb; border: 1px solid #aaa; border-left: 15px solid black;\">\n<tr>\n<td width=\"10%\" align=\"center\">\n<div style=\"width:50px;\"><a href=\"/wikiprf/index.php/Arquivo:Ato_Normativo.png\" class=\"image\"><img alt=\"Ato Normativo.png\" src=\"/wikiprf/images/thumb/8/88/Ato_Normativo.png/62px-Ato_Normativo.png\" width=\"62\" height=\"62\" srcset=\"/w ......
  }
 }
}

Проблема ::

Этот "*" не может быть именем переменной (*), но для модификации требуется, чтобы я использовал свойство с тем же именем, что и ключ в массиве json. Как мне получить содержимое страницы в MediaWiki API в модификации (Android, Kotlin)?

1 Ответ

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

Поскольку вы не можете знать имя, свойство нельзя сопоставить с именованным полем, но с типом словаря или карты. Предполагая, что вы используете Gson в качестве конвертера с вашим Retrofit, хорошим мерзавцем будет JsonObject, но вы также должны изучить JsonElement. Затем вам нужно будет пройтись по клавишам (*), чтобы найти ваши данные.

Чтобы узнать, как настроить Gson или любой другой конвертер, см. Раздел Модификация здесь https://square.github.io/retrofit/

Gson Javadoc здесь: https://www.javadoc.io/doc/com.google.code.gson/gson/2.8.5

Обратите внимание, что вы можете точно настроить процесс сериализации в соответствии с вашими потребностями с помощью специального десериализатора. Подробнее об этом здесь: https://github.com/google/gson/blob/master/UserGuide.md

...