Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I iterate JSONObject to get individual items

Tags:

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?

like image 438
arsenal Avatar asked Oct 13 '12 05:10

arsenal


People also ask

How do I traverse a JSON array?

1) Create a Maven project and add json dependency in POM. xml file. 2) Create a string of JSON data which we convert into JSON object to manipulate its data. 3) After that, we get the JSON Array from the JSON Object using getJSONArray() method and store it into a variable of type JSONArray.

What is the difference between JSON object and JSON object?

JSONObject is "native" to Android SDK, JsonObject is probably the one from Gson library, the one that I use. Two different package, don't work with both ;) choose one. I had some issue with the date formatting in JSONObject.


1 Answers

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} 
like image 66
kannanrbk Avatar answered Sep 30 '22 18:09

kannanrbk