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
iduna sinplegetIntcomo 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 queidse asigneint idvarias veces?Un org.json.JSONArray no es iterable.
Así es como proceso elementos en un net.sf.json.JSONArray :
Funciona genial... :)
fuente
JSONArrayno es iterable.Java 8 está en el mercado después de casi 2 décadas, la siguiente es la forma de iterar
org.json.JSONArraycon java8 Stream API.Si la iteración es solo una vez, (no es necesario
.collect)fuente
.mapToObjmuestra "excepción no controlada: JSONException".mapToObj(index -> (JSONObject) array.get(index)), los theresjsonArray.get(index)que potencialmente pueden lanzarJSONException, peroJSONException extends RuntimeExceptionlo 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.JSONObjecttiene untoJSONArray(JSONArray names)método yorg.json.JSONArraytiene 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