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?
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.
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.
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}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With