leer jsonarray example deserializar java json arrays

jsonarray - leer json en java



Acceder a miembros de elementos en un JSONArray con Java (6)

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 obtendría los valores "id" y "loc" dentro de un ciclo for. Lo siento si esta descripción no está muy clara, soy un poco nuevo en la programación.



Al mirar su código, siento que está usando JSONLIB. Si ese fue el caso, mira el siguiente fragmento para convertir una matriz json a una matriz Java.

JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input ); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY ); jsonConfig.setRootClass( Integer.TYPE ); int[] output = (int[]) JSONSerializer.toJava( jsonArray, jsonConfig );


En caso de que ayude a otra persona, pude convertir a una matriz haciendo algo como esto,

JSONObject jsonObject = (JSONObject)new JSONParser().parse(jsonString); ((JSONArray) jsonObject).toArray()

... o debería ser capaz de obtener la longitud

((JSONArray) myJsonArray).toArray().length


HashMap regs = (HashMap) parser.parse (stringjson);

(String) (( HashMap ) regs.get ("firstlevelkey")). Get ("secondlevelkey");


Java 8 está en el mercado después de casi 2 décadas, a continuación se presenta la forma de iterar org.json.JSONArray con java8 Stream API.

import org.json.JSONArray; import org.json.JSONObject; @Test public void access_org_JsonArray() { //Given: array JSONArray jsonArray = new JSONArray(Arrays.asList(new JSONObject( new HashMap() {{ put("a", 100); put("b", 200); }} ), new JSONObject( new HashMap() {{ put("a", 300); put("b", 400); }} ))); //Then: convert to List<JSONObject> List<JSONObject> jsonItems = IntStream.range(0, jsonArray.length()) .mapToObj(index -> (JSONObject) jsonArray.get(index)) .collect(Collectors.toList()); // you can access the array elements now jsonItems.forEach(arrayElement -> System.out.println(arrayElement.get("a"))); // prints 100, 300 }

Si la iteración es solo una vez, (no es necesario .collect )

IntStream.range(0, jsonArray.length()) .mapToObj(index -> (JSONObject) jsonArray.get(index)) .forEach(item -> { System.out.println(item); });


Un org.json.JSONArray no es iterable.
Así es como proceso los elementos en net.sf.json.JSONArray :

JSONArray lineItems = jsonObject.getJSONArray("lineItems"); for (Object o : lineItems) { JSONObject jsonLineItem = (JSONObject) o; String key = jsonLineItem.getString("key"); String value = jsonLineItem.getString("value"); ... }

Funciona genial... :)