Как перебрать список внутри объекта JSON, используя Kotlin - PullRequest
0 голосов
/ 27 октября 2018

Я получаю объект JSON из HTTP-запроса с использованием библиотеки Fuel, которая выглядит следующим образом:

{
 'items': ['item1', 'item2', 'item3']
}

Мой код для получения JSONobject:

Fuel.get("get_cameras").responseJson { request, response, result -> 
    var my_json = result.get().obj()    
}

Как я могу перебрать ключ 'items'? Я пробовал:

 for (items in  my_json) {}

но он говорит, что не имеет метода iterator (). Я пришел из Python и, вероятно, думаю об этом неправильно, потому что вижу множество других, казалось бы, похожих вопросов, но, похоже, ни один из них не связан с тем, что я пытаюсь сделать.

1 Ответ

0 голосов
/ 27 октября 2018

Сначала необходимо получить массив, вложенный в ваш объект, с помощью клавиши "items", а затем вы можете выполнить итерацию по этому массиву. Основной способ сделать это (если вы уверены, что он содержит только строки) состоит в том, чтобы перебрать его индексы и вызвать getString в массиве для каждого индекса:

val my_json = result.get().obj()
val items = my_json.getJSONArray("items")

for (i in 0 until items.length()) {
    val item = items.getString(i)
    // use item
}

Если вы не хотите иметь дело с индексами во время итерации, вы можете заключить итерацию JSONArray в функцию расширения:

fun JSONArray.forEachString(action: (String) -> Unit) {
    for (i in 0 until length()) {
        action(getString(i))
    }
}

Что может быть использовано следующим образом:

val items = my_json.getJSONArray("items")
items.forEachString { item ->
    // use item
}

Вы можете расширить класс JSONArray с помощью функции iterator, если вы действительно хотите итерировать массив с помощью регулярного цикла for, но это будет больше проблем, чем оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...