Saltar al contenido

Kotlin: iterar a través de un JSONArray

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)
}

?

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *