Transformando JSONArray en Iterable <JSONObject> – Kotlin

Estoy usando Json-Simple en Kotlin.

En qué situaciones podría esto arrojar:

val jsonObjectIterable = jsonArray as Iterable<JSONObject> 

Ser peligroso? jsonArray es un object JSONArray .

Puedes lanzarlo con éxito, ya que JSONArray es-A Iterable . pero no puede asegurar que cada elemento en JSONArray sea ​​un JSONObject .

El JSONArray es una List tipo sin formatting , lo que significa que puede agregar cualquier cosa, por ejemplo:

 val jsonArray = JSONArray() jsonArray.add("string") jsonArray.add(JSONArray()) 

Cuando el código opera en un tipo genérico Iterable<JSONObject> desde un tipo crudo JSONArray , puede lanzarse una ClassCastException , por ejemplo:

 val jsonObjectIterable = jsonArray as Iterable<JSONObject> // v--- throw ClassCastException, when try to cast a `String` to a `JSONObject` val first = jsonObjectIterable.iterator().next() 

Entonces, es por eso que se vuelven peligrosos. Por otro lado, si solo desea agregar JSONObjec s al JSONArray , puede convertir un tipo sin formatting JSONArray en un tipo genérico MutableList<JSONObject> , por ejemplo:

 @Suppress("UNCHECKED_CAST") val jsonArray = JSONArray() as MutableList<JSONObject> // v--- the jsonArray only can add a JSONObject now jsonArray.add(JSONObject(mapOf("foo" to "bar"))) // v--- there is no need down-casting here, since it is a Iterable<JSONObject> val jsonObjectIterable:Iterable<JSONObject> = jsonArray val first = jsonObjectIterable.iterator().next() println(first["foo"]) // ^--- return "bar" 
  • ¿Cómo comstackr Kotlin para include el jar de Java con la línea de command?
  • Crear una nueva instancia de una KClass
  • Diferencia entre el receptor de function y la function de extensión
  • ¿Por qué Kotlin Lang permite solo una function principal en el proyecto?
  • ¿Hay alguna forma mejor de acceder a la propiedad que se puede anotar?
  • La testing de instrumento Android con Espresso falla: NoSuchMethodError get () en javax.inject.Provider
  • Contravarianza en Kotlin
  • Tornadofx - controlando el object de la fila de la vista de tabla mientras construye
  • El generador de secuencia como llamada de function de extensión falla con "falta de coincidencia de tipo de receptor"
  • Kotlin JS - cadena de conversión de numbers?
  • Sala: error al utilizar @Transaction