Moshi - преобразовать строку в объект - PullRequest
1 голос
/ 16 октября 2019

Я не могу понять, как это сделать в kotlin. Я хочу преобразовать эту строку в массив объектов:

[
{mode=bus, line=381, line_name=381, direction=Waterloo, operator=CX, date=2019-10-16, expected_departure_date=2019-10-16, aimed_departure_time=20:11, expected_departure_time=20:13, best_departure_estimate=20:13, source=Countdown instant, dir=outbound, operator_name=ABELLIO LONDON LIMITED, id=https://transportapi.com/v3/uk/bus/route/CX/381/outbound/490010596E/2019-10-16/20:11/timetable.json?app_id=f56baf6a&app_key=6b0d065a1465ccbb6f32438f3d960803}, 

{mode=bus, line=381, line_name=381, direction=Waterloo, operator=CX, date=2019-10-16, expected_departure_date=2019-10-16, aimed_departure_time=20:33, expected_departure_time=20:34, best_departure_estimate=20:34, source=Countdown instant, dir=outbound, operator_name=ABELLIO LONDON LIMITED, id=https://transportapi.com/v3/uk/bus/route/CX/381/outbound/490010596E/2019-10-16/20:33/timetable.json?app_id=f56baf6a&app_key=6b0d065a1465ccbb6f32438f3d960803}
]

Объект, который я тоже хочу преобразовать:

@JsonClass(generateAdapter = true)
data class BusLive(val aimed_departure_time: String, val best_departure_estimate: String, val date: String, val dir: String,
    val direction: String,
    val expected_departure_date: String,
    val expected_departure_time: String,
    val id: String,
    val line: String,
    val line_name: String,
    val mode: String,
    val operator: String,
    val operator_name: String,
    val source: String
)

Я пробовал:

  fun moshiConverter(test:String) : String {
        val moshi = Moshi.Builder().build()
        val type = Types.newParameterizedType(LiveBus::class.java, LiveBus::class.java)
        val adapter:JsonAdapter<String> = moshi.adapter(type)
        val a = adapter.toJson(test)
        return a
    }

И без радости: (

1 Ответ

0 голосов
/ 20 октября 2019

Я надеюсь, что вы разместили в формате JSON в качестве примера. Потому что это недопустимая строка JSON.

Чтобы исправить пример, необходимо изменить пару строк:

    val type = Types.newParameterizedType(LiveBus::class.java, LiveBus::class.java)
    val adapter:JsonAdapter<String> = moshi.adapter(type)

на

    val type = Types.newParameterizedType(List::class.java, LiveBus::class.java)
    val adapter = moshi.adapter(type)
...