I use net.sf.json
library but you can use the logic
Here is the code :
import java.util.Iterator;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;
public class Test {
static String str = "{ \"results\" : [ { \"address_components\" : [ { \"long_name\" : \"Minneapolis\", \"short_name\" : \"Minneapolis\", \"types\" : [ \"locality\", \"political\" ] }, { \"long_name\" : \"Hennepin County\", \"short_name\" : \"Hennepin County\", \"types\" : [ \"administrative_area_level_2\", \"political\" ] }, { \"long_name\" : \"Minnesota\", \"short_name\" : \"MN\", \"types\" : [ \"administrative_area_level_1\", \"political\" ] }, { \"long_name\" : \"United States\", \"short_name\" : \"US\", \"types\" : [ \"country\", \"political\" ] } ], \"formatted_address\" : \"Minneapolis, MN, USA\", \"geometry\" : { \"bounds\" : { \"northeast\" : { \"lat\" : 45.05125, \"lng\" : -93.193794 }, \"southwest\" : { \"lat\" : 44.890144, \"lng\" : -93.32916299999999 } }, \"location\" : { \"lat\" : 44.983334, \"lng\" : -93.26666999999999 }, \"location_type\" : \"APPROXIMATE\", \"viewport\" : { \"northeast\" : { \"lat\" : 45.05125, \"lng\" : -93.193794 }, \"southwest\" : { \"lat\" : 44.890144, \"lng\" : -93.32916299999999 } } }, \"types\" : [ \"locality\", \"political\" ] } ], \"status\" : \"OK\"}";
public static void main(String[] args) {
parseAndCheckJsonObj(str, "");
}
static void parseAndCheckJsonObj(Object str, Object key) {
/*
* Check whether str is Valid JSON
* String i.e. started by { [ or not
*/
if (JSONUtils.mayBeJSON(str.toString())) {
try {
if (JSONUtils.isArray(str)) {
/*if block Check for str as a Json Array*/
JSONArray rootArr = JSONArray.fromObject(str);
for (int i = 0; i < rootArr.size(); i++) {
parseAndCheckJsonObj(rootArr.get(i), key);
}
} else {
/*else block Check for str as a Json Object*/
JSONObject rootObj = JSONObject.fromObject(str);
Iterator keyIter = rootObj.keys();
while (keyIter.hasNext()) {
Object objKey = keyIter.next();
parseAndCheckJsonObj(rootObj.get(objKey), objKey);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
if (key.equals("lat"))
System.out.println("Latitude is : " + str);
else if (key.equals("lng"))
System.out.println("Longitude is : " + str);
else
System.out.println(key + " : " + str);
}
}
}
My Output is :
long_name : Minneapolis
short_name : Minneapolis
types : locality
types : political
long_name : Hennepin County
short_name : Hennepin County
types : administrative_area_level_2
types : political
long_name : Minnesota
short_name : MN
types : administrative_area_level_1
types : political
long_name : United States
short_name : US
types : country
types : political
formatted_address : Minneapolis, MN, USA
Latitude is : 45.05125
Longitude is : -93.193794
Latitude is : 44.890144
Longitude is : -93.329163
Latitude is : 44.983334
Longitude is : -93.26666999999999
location_type : APPROXIMATE
Latitude is : 45.05125
Longitude is : -93.193794
Latitude is : 44.890144
Longitude is : -93.329163
types : locality
types : political
status : OK