22

This is my below code from which I need to parse the JSONObject to get individual items. This is the first time I am working with JSON. So not sure how to parse JSONObject to get the individual items from 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(); } 

My JSON looks like this:

{ "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 } } } } 

I need to get latitude, longitude, city, state, country, postal_code from the above object. Can anyone provide any suggestion how to do it efficiently?

2 Answers 2

60

You can try this it will recursively find all key values in a json object and constructs as a map . You can simply get which key you want from the Map .

public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{ Iterator<String> 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<String,String> out = new HashMap<String, String>(); 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); } 

Output:

 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} 
Sign up to request clarification or add additional context in comments.

1 Comment

Good answer. I would just mention that in this case, Map<String, String> works just fine, but to make it more generic, I would do Map<String, Object>, as some of the fields are numeric.
12

How about this?

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); 

This sample code using "org.json.JSONObject"

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.