我想得到" lat"和" lng"从我的JSON文件中添加一个保留GeoPoint的数组。我试图这样做,但它不适合我:
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;
}
这是查看我的JSON文件的一部分:
{
"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"
},
有谁知道我怎么能以其他方式做到这一点?
答案 0 :(得分:3)
您的变量JSONArray steps = obj.getJSONArray("routes");
不代表JSON对象的“steps”部分,而是“routes”部分。
此外,您已跳过JSON层次结构中的某些级别。使用给定的JSON,您需要以下步骤来遍历JSON(我已经省略了对不同数组的循环,除了routes数组)
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");
答案 1 :(得分:1)
解析当前的json String以获取lat和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"));
}
}
}