Estoy empezando a usar json con java. No estoy seguro de cómo acceder a los valores de cadena dentro de un JSONArray. Por ejemplo, mi json se ve así:
{
"locations": {
"record": [
{
"id": 8817,
"loc": "NEW YORK CITY"
},
{
"id": 2873,
"loc": "UNITED STATES"
},
{
"id": 1501
"loc": "NEW YORK STATE"
}
]
}
}
mi código:
JSONObject req = new JSONObject(join(loadStrings(data.json),""));
JSONObject locs = req.getJSONObject("locations");
JSONArray recs = locs.getJSONArray("record");
Tengo acceso al "registro" JSONArray en este punto, pero no estoy seguro de cómo obtener los valores "id" y "loc" dentro de un bucle for. Lo siento si esta descripción no es muy clara, soy un poco nuevo en programación.
Respuestas:
¿Has intentado usar JSONArray.getJSONObject (int) y JSONArray.length () para crear tu bucle for:
fuente
id
una sinplegetInt
como cómo obtenemos el valor de un hashmap especificando la clave, entonces ¿por qué tenemos que iterar con un bucle for? ¿La iteración con el ciclo no hace queid
se asigneint id
varias veces?Un org.json.JSONArray no es iterable.
Así es como proceso elementos en un net.sf.json.JSONArray :
Funciona genial... :)
fuente
JSONArray
no es iterable.Java 8 está en el mercado después de casi 2 décadas, la siguiente es la forma de iterar
org.json.JSONArray
con java8 Stream API.Si la iteración es solo una vez, (no es necesario
.collect
)fuente
.mapToObj
muestra "excepción no controlada: JSONException".mapToObj(index -> (JSONObject) array.get(index))
, los theresjsonArray.get(index)
que potencialmente pueden lanzarJSONException
, peroJSONException extends RuntimeException
lo que debe multar al menos en tiempo de compilaciónAl mirar su código, siento que está utilizando JSONLIB. Si ese fuera el caso, mire el siguiente fragmento para convertir json array a java array ..
fuente
En caso de que ayude a alguien más, pude convertir a una matriz haciendo algo como esto,
... o deberías poder obtener la longitud
fuente
org.json.JSONObject
tiene untoJSONArray(JSONArray names)
método yorg.json.JSONArray
tiene untoJSONObject(JSONArray names)
método pero no tiene untoArray()
método.HashMap regs = (HashMap) parser.parse (stringjson);
(Cadena) (( HashMap ) regs.get ("firstlevelkey")). Get ("secondlevelkey");
fuente