Solución:
Desafortunadamente, JsonArray
no expone un iterador. Entonces tendrás que recorrerlo usando un rango de índice:
for (i in 0 until persons.length()) {
val item = persons.getJSONObject(i)
// Your code here
}
Incluso si alguna clase no expone un iterator
método, aún puedes iterarlo con for
declaración proporcionando una función de extensión iterator
:
operator fun JSONArray.iterator(): Iterator<JSONObject>
= (0 until length()).asSequence().map { get(it) as JSONObject }.iterator()
Ahora cuando usas JSONArray
en for
declaración esta extensión se invoca para obtener un iterador. Crea una gama de índices y asigna cada índice a un elemento correspondiente a este índice.
Supongo que el elenco a JSONObject
es necesario ya que la matriz puede contener no solo objetos, sino también primitivas y otras matrices. Y el asSequence
la llamada está aquí para ejecutar map
operación de forma perezosa.
Forma genérica (asumiendo todas las entradas de la matriz son del mismo tipo)
@Suppress("UNCHECKED_CAST")
operator fun <T> JSONArray.iterator(): Iterator<T>
= (0 until length()).asSequence().map { get(it) as T }.iterator()
Qué tal si
(0..(jsonArray.length()-1)).forEach { i ->
var item = jsonArray.getJSONObject(i)
}
?