Saltar al contenido

Recuperar valores de un objeto JSON anidado

El tutorial o código que hallarás en este post es la resolución más sencilla y válida que hallamos a tu duda o problema.

Solución:

Tal vez no esté utilizando la última versión de una biblioteca JSON para Java.

json-simple no se ha actualizado durante mucho tiempo, mientras que JSON-Java fue actualizado hace 2 meses.

JSON-Java se puede encontrar en GitHub, aquí está el enlace a su repositorio: https://github.com/douglascrockford/JSON-java

Después de cambiar la biblioteca, puede consultar mi código de muestra a continuación:

public static void main(String[] args) 
    String JSON = ""LanguageLevels":"1":"Pocz\u0105tkuj\u0105cy","2":"\u015arednioZaawansowany","3":"Zaawansowany","4":"Ekspert"n";

    JSONObject jsonObject = new JSONObject(JSON);
    JSONObject getSth = jsonObject.getJSONObject("LanguageLevels");
    Object level = getSth.get("2");

    System.out.println(level);

Y como JSON-Java de código abierto, puede leer el código y su documento, lo guiarán.

Espero que ayude.

Tendrá que iterar paso a paso en JSON anidado.

por ejemplo, un JSON recibido de la API de geocodificación de Google


   "results" : [
      
         "address_components" : [
            
               "long_name" : "Bhopal",
               "short_name" : "Bhopal",
               "types" : [ "locality", "political" ]
            ,
            
               "long_name" : "Bhopal",
               "short_name" : "Bhopal",
               "types" : [ "administrative_area_level_2", "political" ]
            ,
            
               "long_name" : "Madhya Pradesh",
               "short_name" : "MP",
               "types" : [ "administrative_area_level_1", "political" ]
            ,
            
               "long_name" : "India",
               "short_name" : "IN",
               "types" : [ "country", "political" ]
            
         ],
         "formatted_address" : "Bhopal, Madhya Pradesh, India",
         "geometry" : 
            "bounds" : 
               "northeast" : 
                  "lat" : 23.3326697,
                  "lng" : 77.5748062
               ,
               "southwest" : 
                  "lat" : 23.0661497,
                  "lng" : 77.2369767
               
            ,
            "location" : 
               "lat" : 23.2599333,
               "lng" : 77.412615
            ,
            "location_type" : "APPROXIMATE",
            "viewport" : 
               "northeast" : 
                  "lat" : 23.3326697,
                  "lng" : 77.5748062
               ,
               "southwest" : 
                  "lat" : 23.0661497,
                  "lng" : 77.2369767
               
            
         ,
         "place_id" : "ChIJvY_Wj49CfDkR-NRy1RZXFQI",
         "types" : [ "locality", "political" ]
      
   ],
   "status" : "OK"

Voy a iterar de la siguiente manera dada
a “ubicación”: { “lat”: 23.2599333, “lng”: 77.412615

// recibir JSON en el objeto json

        JSONObject json = new JSONObject(output.toString());
        JSONArray result = json.getJSONArray("results");
        JSONObject result1 = result.getJSONObject(0);
        JSONObject geometry = result1.getJSONObject("geometry");
        JSONObject locat = geometry.getJSONObject("location");

        //"iterate onto level of location";

        double lat = locat.getDouble("lat");
        double lng = locat.getDouble("lng");

Puede ver que JSONObject extiende un HashMappor lo que simplemente puede usarlo como HashMap:

JSONObject jsonChildObject = (JSONObject)jsonObject.get("LanguageLevels");
for (Map.Entry in jsonChildOBject.entrySet()) 
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

Nos encantaría que puedieras dar visibilidad a este escrito si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *