Почему происходит ошибка "ktor client error serialization illegal input" при сериализации JSON?

Рейтинг: 0Ответов: 0Опубликовано: 18.03.2023

Подскажите пожалуйста, в чём может быть ошибка? У меня есть два дата класса для получения и серилизации JSON. При выполнении кода возникает ошибка:

Exception in stream "main" io.ktor.serialization.JsonConvertException: Invalid input Thrown: 
kotlinx.serialization.json.internal.JsonDecodingException: Expected object 
start '{' but got 'EOF' instead at path: $JSON input: . ....-21T01:41:59.300Z","created_at":"2023-02-21T01:41:59.300Z"}]

Вот код:

import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.engine.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.Serializable

@Serializable
data class RandomBrewerysListA(
    var brewerys: List<RandomBreweryItemA>
)

@Serializable
data class RandomBreweryItemA(
    var id: String,
    var name: String,
    var brewery_type: String,
    var street: String,
    var address_2: String? = null,
    var address_3: String? = null,
    var city: String,
    var state: String,
    var county_province: String? = null,
    var postal_code: String,
    var country: String,
    var longitude: String? = null,
    var latitude: String? = null,
    var phone: String? = null,
    var website_url: String? = null,
    var updated_at: String,
    var created_at: String
)

class BreweryApiA(engine: HttpClientEngine){
    private val httpClient = HttpClient(engine) {
        install(ContentNegotiation) {
            json()
        }
    }
      suspend fun getListBreweries(): RandomBrewerysListA = httpClient.get("https://api.openbrewerydb.org/breweries/random").body()

}


fun main(){
    runBlocking {
        val listBrewery = BreweryApiA(CIO.create())
        val brewers = listBrewery.getListBreweries()
        println(brewers)

    }
}

Ответы

Ответов пока нет.