Разбор JsonObject в класс данных kotlin - PullRequest
0 голосов
/ 24 мая 2019

Я довольно новичок в Kotlin, и я пытаюсь разобрать JsonObject, которое я получаю из моего HTTPRequest в data class. Но я не могу получить Instance от data класса.

val jsonObjectRequest = JsonObjectRequest(Request.Method.GET, url, null,
    Response.Listener { response ->
        val text = "Response: %s".format(response.toString())
        print(text)
    },
    Response.ErrorListener { error ->
        // TODO: Handle error
    }

)

@Throws(AuthFailureError::class)
@Override
fun getHeaders(): Map<String, String> {
    var params = HashMap<String, String>()
    if (params == null) params = HashMap()
    val basicAuth = "Basic " + Base64.encodeToString("username:password".toByteArray(), Base64.NO_WRAP);
    params["Authorization"] = basicAuth
    //..add other headers
    return params
}

TempJsonObject.instance?.addToRequestQueue(jsonObjectRequest)

Класс данных

data class TempJsonObject(
    val content: List<Content>) {
data class Content(
        val kioskId: Int,
        val location: Location,
        val stats: Stats,
        val settings: Settings,
        val modules: String,
        val visibility: String
) {
    data class Stats(
            val allLockers: Int,
            val emptyLockers: Int,
            val malfunctionLockers: Int,
            val forCustomer: Int,
            val forCourier: Int,
            val bySize: BySize,
            val incoming: Any
    ) {
        data class BySize(
                val XXSMALL: Xxsmall,
                val XSMALL: Xsmall,
                val SMALL: Small,
                val MEDIUM: Medium,
                val LARGE: Large,
                val XLARGE: Xlarge
        ) {
            data class Xxsmall(
                    val empty: Int,
                    val hasContent: Int
            )
        ...

Правильный ли способ, которым я пытаюсь это сделать, и что я делаю неправильно?

1 Ответ

0 голосов
/ 29 мая 2019

Глядя на instance?.addToRequestQueue, это действительно озадачивает меня.Я не знаю ни одного подобного API Kotlin для анализа JSON.Я думал, что вы используете какую-то библиотеку, которая добавляет такой API, но вы также написали в комментарии, что код не компилируется из-за отсутствия поля instance.Похоже, что он предоставляет некий одноэлементный экземпляр класса данных.Не могли бы вы указать мне на какой-нибудь рабочий пример с использованием такого API или любого другого источника, который вы использовали?

Если вышеприведенное окажется неверным, я бы просто использовал библиотеку Kotlin или Java для анализа JSON в экземпляр класса данных.Одним из вариантов является библиотека Klinlin Klaxon: https://github.com/cbeust/klaxon. Цитируя один из примеров, который должен соответствовать вашему варианту использования:

val result = Klaxon().parse<Person>(""" { "name": "John Smith", } """)

assert(result?.name == "John Smith")
assert(result.age == 23)
...