Reputation: 25
I would like to get "lat" and "lng" from my JSON file and add to one array that keeps GeoPoint. I was trying to do it like that but it is not working for me :
protected List<GeoPoint> JsonArray(){
List<GeoPoint> endp = new ArrayList<GeoPoint>();
try{
JSONObject obj = new JSONObject(json);
JSONArray steps = obj.getJSONArray("routes");
for(int i=0;i<steps.length();i++){
JSONObject temp = steps.getJSONObject(i);
JSONObject ele = temp.optJSONObject("steps").optJSONObject("end_location");
ele.getJSONObject("lat");
ele.getJSONObject("lng");
double lat = Double.parseDouble(ele.getJSONObject("lat").toString());
double lng = Double.parseDouble(ele.getJSONObject("lng").toString());
endp.add(new GeoPoint((int)(lat *1E6),(int)(lng * 1E6)));
}
}catch (JSONException e) {
// TODO: handle exception
}
return endp;
}
Here's a part of how looks my JSON file:
{
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 41.87999000000001,
"lng" : -87.615020
},
"southwest" : {
"lat" : 29.74674000000001,
"lng" : -95.361220
}
},
"copyrights" : "Dane do Mapy ©2013 Google",
"legs" : [
{
"distance" : {
"text" : "1 085 mil",
"value" : 1746457
},
"duration" : {
"text" : "16 godz. 39 min",
"value" : 59955
},
"end_address" : "1362 Chenevert Street, Houston, Teksas 77003, Stany Zjednoczone",
"end_location" : {
"lat" : 29.750110,
"lng" : -95.36016000000001
},
"start_address" : "138-230 South Columbus Drive, Chicago, Illinois 60601, Stany Zjednoczone",
"start_location" : {
"lat" : 41.87999000000001,
"lng" : -87.62075000000002
},
"steps" : [
{
"distance" : {
"text" : "338 stóp",
"value" : 103
},
"duration" : {
"text" : "1 min",
"value" : 9
},
"end_location" : {
"lat" : 41.88090,
"lng" : -87.62069000000001
},
"html_instructions" : "Kieruj się \u003cb\u003eS Columbus Dr\u003c/b\u003e na \u003cb\u003epółnoc\u003c/b\u003e w stronę \u003cb\u003eE Monroe St\u003c/b\u003e",
"polyline" : {
"points" : "}tr~FtlxuOuA@w@@QMUA"
},
"start_location" : {
"lat" : 41.87999000000001,
"lng" : -87.62075000000002
},
"travel_mode" : "DRIVING"
},
{
"distance" : {
"text" : "0,2 mil",
"value" : 266
},
"duration" : {
"text" : "1 min",
"value" : 33
},
"end_location" : {
"lat" : 41.88086000000001,
"lng" : -87.61750000000001
},
"html_instructions" : "Skręć \u003cb\u003ew prawo\u003c/b\u003e w \u003cb\u003eE Monroe St\u003c/b\u003e",
"polyline" : {
"points" : "szr~FhlxuO?SAyA?_B@yA?iBAaB?WBE@C@A?C?A@A?C?y@?_@"
},
"start_location" : {
"lat" : 41.88090,
"lng" : -87.62069000000001
},
"travel_mode" : "DRIVING"
},
{
"distance" : {
"text" : "2,0 mil",
"value" : 3186
},
"duration" : {
"text" : "3 min",
"value" : 180
},
"end_location" : {
"lat" : 41.85320,
"lng" : -87.61470000000001
},
"html_instructions" : "Skręć \u003cb\u003ew prawo\u003c/b\u003e w \u003cb\u003eU.S. 41 S\u003c/b\u003e",
"polyline" : {
"points" : "kzr~FjxwuOpMOZ@`PO|ACvDC@?lDCZAfMGjAA`@Av@?^?P?N@P@j@LRFNDRJRHZRb@\\b@^nAjA@@JJXXb@b@z@v@RRp@`@RLr@Xn@Np@J`A@bBOp@Kv@K@?@?@A@?@?@?@?PEvBWxB]fDq@xA]jF_BTIj@QpGuBd@OBAf@SrDyAPGNG@AVKbA_@~@]|@]z@Y`F{AtCy@fHyB"
},
"start_location" : {
"lat" : 41.88086000000001,
"lng" : -87.61750000000001
},
"travel_mode" : "DRIVING"
},
{
"distance" : {
"text" : "0,4 mil",
"value" : 581
},
"duration" : {
"text" : "1 min",
"value" : 30
},
"end_location" : {
"lat" : 41.848390,
"lng" : -87.614670
},
"html_instructions" : "Zjedź \u003cb\u003eInterstate 55 S\u003c/b\u003e w kierunku \u003cb\u003eSaint Louis\u003c/b\u003e",
"polyline" : {
"points" : "omm~FzfwuOVDPAN?VGlBk@b@M@?JEDAVI`A[dBi@`A[z@UPGZGf@E\\Ab@@VDJBHBTFTHRJPNRNLL\\f@NXLTP\\BF"
},
"start_location" : {
"lat" : 41.85320,
"lng" : -87.61470000000001
},
"travel_mode" : "DRIVING"
},
Does anyone knows how can I do it in other way?
Upvotes: 0
Views: 1064
Reputation: 132982
parse current json String as to get lat and lng :
JSONObject obj = new JSONObject(json);
JSONArray steps = obj.getJSONArray("routes");
for(int i=0;i<steps.length();i++){
JSONObject temp = steps.getJSONObject(i);
// get bounds JSONObject
JSONObject boundsjsonobj = temp.getJSONObject("bounds");
// get northeast JSONObject
JSONObject jsonboj_bounds_northeast= boundsjsonobj.getJSONObject("northeast");
// get northeast lng and lat
String str_northeast_lat=jsonboj_bounds_northeast.getString("lat");
String str_northeast_lng=jsonboj_bounds_northeast.getString("lng");
// get southwest JSONObject
JSONObject jsonboj_bounds_southwest= boundsjsonobj.getJSONObject("southwest");
// get northeast lng and lat
String str_southwest_lat=jsonboj_bounds_southwest.getString("lat");
String str_southwest_lng=jsonboj_bounds_southwest.getString("lng");
//get legs JsonArray from routes
JSONArray jsonarray_legs = temp.getJSONArray("legs");
for(int j=0;j<jsonarray_legs.length();j++){
JSONObject jobjlegs = jsonarray_legs.getJSONObject(j);
// get end_location json object
JSONObject jobjlegs_end_location = jobjlegs.getJSONObject("end_location");
String str_end_location_lat==jobjlegs_end_location.getString("lat");
String str_end_location_lng==jobjlegs_end_location.getString("lng");
// get start_address object
JSONObject jobjlegs_start_address = jobjlegs.getJSONObject("start_address");
String str_start_address_lat==jobjlegs_start_address.getString("lat");
String str_start_address_lng==jobjlegs_start_address.getString("lng");
// get steps jsonArray
JSONArray jsonarray_steps = jobjlegs.getJSONArray("steps");
for(int k=0;k<jsonarray_steps.length();k++){
JSONObject jobjsteps = jsonarray_steps.getJSONObject(k);
// get end_location jsonobject
JSONObject jobjsteps_end_location = jobjsteps.getJSONObject("end_location");
double latend = Double.parseDouble(jobjsteps_end_location.getString("lat"));
double lngend = Double.parseDouble(jobjsteps_end_location.getString("lng"));
endp.add(new GeoPoint((int)(latend *1E6),(int)(lngend * 1E6)));
// get start_location jsonobject
JSONObject jobjsteps_start_location = jobjsteps.getJSONObject("start_location");
double latstart = Double.parseDouble(jobjsteps_start_location.getString("lat"));
double lngstart = Double.parseDouble(jobjsteps_start_location.getString("lng"));
}
}
}
Upvotes: 1
Reputation: 501
Your variable JSONArray steps = obj.getJSONArray("routes");
does not represent the "steps" part of the JSON object, but rather the "routes" part.
Also, you have skipped some of the levels in the JSON hierarchy. With the given JSON, you would need the following steps to traverse the JSON (I have omitted looping over the different arrays, except for the routes array)
JSONArray routes = obj.getJSONArray("routes");
for(int i=0; i < routes.length(); i++){
// Grab the first route
JSONObject route = routesArray.getJSONObject(i);
// Take all legs from the route
JSONArray legs = route.getJSONArray("legs");
// Grab first leg
JSONObject leg = legs.getJSONObject(0);
// Take all steps from the leg
JSONArray steps = leg.getJSONArray("steps");
// Grab first step
JSONObject step = steps.getJSONObject(0);
JSONObject endLocation = step.getJSONObject("end_location");
String lat = endLocation.getString("lat");
String lng = endLocation.getString("lng");
Reference: JSON parsing of Google Maps API in Android App
Upvotes: 2