¿Cómo puedo iterar JSONObject para obtener elementos individuales?

Este es mi código debajo del cual necesito analizar el JSONObject para obtener elementos individuales. Esta es la primera vez que trabajo con JSON. Así que no estoy seguro de cómo analizar JSONObject para obtener los elementos individuales de JSONObject .

 try { String url = service + version + method + ipAddress + format; StringBuilder builder = new StringBuilder(); httpclient = new DefaultHttpClient(); httpget = new HttpGet(url); httpget.getRequestLine(); response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inputStream = entity.getContent(); bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); for (String line = null; (line = bufferedReader.readLine()) != null;) { builder.append(line).append("\n"); } JSONObject jsonObject = new JSONObject(builder.toString()); // Now iterate jsonObject to get Latitude,Longitude,City,Country etc etc. } } catch (Exception e) { getLogger().log(LogLevel.ERROR, e.getMessage()); } finally { bufferedReader.close(); httpclient.getConnectionManager().shutdown(); } 

Mi JSON se ve así:

 { "ipinfo": { "ip_address": "131.208.128.15", "ip_type": "Mapped", "Location": { "continent": "north america", "latitude": 30.1, "longitude": -81.714, "CountryData": { "country": "united states", "country_code": "us" }, "region": "southeast", "StateData": { "state": "florida", "state_code": "fl" }, "CityData": { "city": "fleming island", "postal_code": "32003", "time_zone": -5 } } } } 

Necesito obtener latitude , longitude , city , state , country , postal_code del objeto anterior. ¿Alguien puede brindar alguna sugerencia de cómo hacerlo de manera eficiente?

Puedes probar esto, buscará recursivamente todos los valores clave en un objeto json y los construirá como un mapa. Simplemente puede obtener la clave que desea del Mapa.

 public static Map parse(JSONObject json , Map out) throws JSONException{ Iterator keys = json.keys(); while(keys.hasNext()){ String key = keys.next(); String val = null; try{ JSONObject value = json.getJSONObject(key); parse(value,out); }catch(Exception e){ val = json.getString(key); } if(val != null){ out.put(key,val); } } return out; } public static void main(String[] args) throws JSONException { String json = "{'ipinfo': {'ip_address': '131.208.128.15','ip_type': 'Mapped','Location': {'continent': 'north america','latitude': 30.1,'longitude': -81.714,'CountryData': {'country': 'united states','country_code': 'us'},'region': 'southeast','StateData': {'state': 'florida','state_code': 'fl'},'CityData': {'city': 'fleming island','postal_code': '32003','time_zone': -5}}}}"; JSONObject object = new JSONObject(json); JSONObject info = object.getJSONObject("ipinfo"); Map out = new HashMap(); parse(info,out); String latitude = out.get("latitude"); String longitude = out.get("longitude"); String city = out.get("city"); String state = out.get("state"); String country = out.get("country"); String postal = out.get("postal_code"); System.out.println("Latitude : " + latitude + " LongiTude : " + longitude + " City : "+city + " State : "+ state + " Country : "+country+" postal "+postal); System.out.println("ALL VALUE " + out); } 

Salida:

  Latitude : 30.1 LongiTude : -81.714 City : fleming island State : florida Country : united states postal 32003 ALL VALUE {region=southeast, ip_type=Mapped, state_code=fl, state=florida, country_code=us, city=fleming island, country=united states, time_zone=-5, ip_address=131.208.128.15, postal_code=32003, continent=north america, longitude=-81.714, latitude=30.1} 

¿Qué tal esto?

 JSONObject jsonObject = new JSONObject (YOUR_JSON_STRING); JSONObject ipinfo = jsonObject.getJSONObject ("ipinfo"); String ip_address = ipinfo.getString ("ip_address"); JSONObject location = ipinfo.getJSONObject ("Location"); String latitude = location.getString ("latitude"); System.out.println (latitude); 

Este código de muestra usa “org.json.JSONObject”