Вот это JSON я разбирал так:
{"firstName":"Peter","lastName":"Noe"}
data class User(val firstName: String = "", val lastName: String = "") {
class Deserializer : ResponseDeserializable<User> {
override fun deserialize(content: String) = Gson().fromJson(content, User::class.java)!!
}
}
Как разобрать этот? Мне нужно "distance -> value".
{
"destination_addresses" : [
"Пирятинская ул., 33, Абакан, Респ. Хакасия, Россия, 655011"
],
"origin_addresses" : [
"ул. Гагарина, 48-50, Абакан, Респ. Хакасия, Россия, 655002"
],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "3,2 км",
"value" : 3182
},
"duration" : {
"text" : "8 мин.",
"value" : 501
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Старый вариант, но поможет ли он?
val resultJson = JSONObject(responseString)
val rows = resultJson.getJSONArray("rows")
val obj = rows.getJSONObject(0)
val elements = obj.getJSONArray("elements")
val element = elements.getJSONObject(0)
val distance = element.getJSONObject("distance")
var value = distance.getInt("value")
Зачем вы усложняете себе жизнь? За то время, которое вы пытаетесь разобраться с этим бедным json-ом, вы могли бы разобраться с Retrofit (вот пример туториала).
Тогда ваши десериализованные классы выглядели бы так:
data class Distance(var text: String, var value: Int)
data class Duration(var text: String, var value: Int)
data class Element(var distance: Distance, var duration: Duration, var status: String)
data class Row(var elements: List<Element>)
data class Response(var destination_addresses: List<String>, var origin_addresses: List<String>, var rows: List<Row>, var status: String)
С чего я это взял? В статье выше примерно описано как это делается на Java, для котлин это будет еще проще: копируете ваш json вот сюда, и просто делаете из этого дата-классы. Можно скопировать Java-код в котлин файл и подредактировать, но я и руками секунд за 30 справился.
Далее всё будет проще некуда:
// ... проводите все нужные действия, переписывать статью сюда я не буду
apiObject.methodName(param_0, param_1).enqueue(object : Callback<Response>) {
override fun onResponse(call: Call<Response>, response: Response<Response>) {
// Здесь делаете всё, что вам нужно
val resp = response.body()
val destination_addresses = resp.destination_addresses
// и так далее
// я мог немного ошибиться, подправьте сами, но суть такая
}
override fun onFailure(call: Call<Response>, t: Throwable) {
// обрабатываем ошибку
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
У меня есть приложение на Java + HibernateМне надо формировать отчёты в ворде
Есть файл KML, при попытке его считать возникает ошибка при приведении объекта documentFeature класса Feature к типу Placemark, так как Placemark является дочерним...
Здравствуйте! Читаю о generic-ах, в качестве примера приводится класс Optional
При кодировании и декодировании я пользуюсь RSA ключами 2048Для дополнительной защищенности требуется использовать passphrase для RSAPrivateKey методом...