Yo uso una biblioteca JSON llamada JSONObject
(no me importa cambiar si es necesario).
Sé cómo iterar JSONArrays
, pero cuando analizo datos JSON de Facebook no obtengo una matriz, solo una JSONObject
, pero necesito poder acceder a un elemento a través de su índice, como JSONObject[0]
para obtener el primero, y yo No puedo entender cómo hacerlo.
{
"http://http://url.com/": {
"id": "http://http://url.com//"
},
"http://url2.co/": {
"id": "http://url2.com//",
"shares": 16
}
,
"http://url3.com/": {
"id": "http://url3.com//",
"shares": 16
}
}
Respuestas:
Tal vez esto ayude:
fuente
JSONObject
están desordenadas y su afirmación fue un simple reflejo de una implementación privada;)for (String key : keys)
para mi caso encontré iterar bien el
names()
trabajofuente
Iterating
en Java, ¡funciona bastante bien! Gracias.Evitaré el iterador ya que pueden agregar / eliminar objetos durante la iteración, también para el uso de código limpio para el bucle. será simplemente limpio y menos líneas.
Usando Java 8 y Lamda [Actualización 4/2/2019]
Uso a la antigua usanza [Actualización 4/2/2019]
Respuesta original
fuente
No puedo creer que no haya una solución más simple y segura que usar un iterador en estas respuestas ...
El
names ()
método JSONObject devuelve unaJSONArray
de lasJSONObject
claves, por lo que simplemente puede recorrerlo en bucle:fuente
JSONObject
. Algo así comoJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Pero no ponga JSON prima a ella, añadir elementos en ella conput ()
el método:object.put ("key1", "value1");
.fuente
jsonChildObject = iterator.next();
probablemente debería definirjsonChildObject
, comoJSONObject jsonChildObject = iterator.next();
, no?Iterator<JSONObject>
dará una advertencia. Lo reemplazaría con el genérico<?>
y haría un reparto en la llamada anext()
. Además, usaría engetString("id")
lugar deget("id")
guardar haciendo un elenco.org.json.JSONObject ahora tiene un método keySet () que devuelve ay se puede enlazar
Set<String>
fácilmente con un for-each.fuente
Primero pon esto en alguna parte:
O si tiene acceso a Java8, solo esto:
Luego, simplemente repita las claves y valores del objeto:
fuente
Hice una pequeña función recursiva que atraviesa todo el objeto json y guarda la ruta clave y su valor.
fuente
Con Java 8 y lambda, limpiador:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
fuente
Usamos el siguiente conjunto de código para iterar sobre los
JSONObject
camposfuente
Una vez tuve un json que tenía identificadores que debían incrementarse en uno ya que estaban indexados en 0 y eso estaba rompiendo el autoincremento Mysql.
Entonces, para cada objeto que escribí este código, podría ser útil para alguien:
uso:
esto también se puede transformar para trabajar para JSONArray como objeto padre
fuente
La mayoría de las respuestas aquí son para estructuras JSON planas, en caso de que tenga un JSON que podría haber anidado JSONArrays o Nested JSONObjects, surge la verdadera complejidad. El siguiente fragmento de código se ocupa de dicho requisito comercial. Toma un mapa hash y un JSON jerárquico con ambos JSONArrays anidados y JSONObjects y actualiza el JSON con los datos en el mapa hash
Debe notar aquí que el tipo de retorno de esto es nulo, pero los objetos de tamaño se pasan como referencia, este cambio se refelece a la persona que llama.
fuente
El siguiente código funcionó bien para mí. Por favor, ayúdame si se puede hacer el ajuste. Esto obtiene todas las claves incluso de los objetos JSON anidados.
fuente
Esta es otra solución de trabajo para el problema:
fuente