2013-01-21 42 views
0

我想從我的JSON文件中獲取「lat」和「lng」,並添加到保存GeoPoint的一個數組中。我試圖那樣做,但它不是爲我工作:如何從JSON文件中獲取lng和lat

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" : "}[email protected]@@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" : "[email protected][email protected]@[email protected][email protected][email protected]" 
         }, 
         "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" : "[email protected]`PO|[email protected]?lDCZAfMGjAA`@[email protected]?^[email protected]@[email protected]@\\[email protected]^[email protected]@[email protected]@[email protected]@[email protected]`@[email protected]@[email protected]`[email protected]@[email protected]@[email protected][email protected]@[email protected][email protected][email protected]?PEvBWxB][email protected]][email protected]@[email protected]@[email protected][email protected]]|@][email protected]`F{[email protected]" 
         }, 
         "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" : "[email protected]@[email protected]?JEDAVI`A[[email protected]`A[[email protected]@E\\[email protected]@VDJBHBTFTHRJPNRNLL\\[email protected]\\BF" 
         }, 
         "start_location" : { 
          "lat" : 41.85320, 
          "lng" : -87.61470000000001 
         }, 
         "travel_mode" : "DRIVING" 
         }, 

有誰知道我怎麼能做到這一點在其他辦法?

+0

PLZ發表您的完整有效的JSON –

+0

我不能添加都在那裏,但在這裏,你必須鏈接到我的JSON文件http://maps.google.com/maps/api/directions /json?origin=41.88,-87.62&destination=29.75,-95.36&sensor=true&mode=driving – carolajnn

+0

請參閱我的回答... –

回答

3

您的變量JSONArray steps = obj.getJSONArray("routes");不代表JSON對象的「steps」部分,而是「routes」部分。

另外,您跳過了JSON層次結構中的一些級別。與給定的JSON,則需要以下步驟來遍歷JSON(I省略循環在不同的陣列,除了路由陣列)

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"); 

參考:JSON parsing of Google Maps API in Android App

1

解析當前JSON字符串作爲獲得緯度和經度:

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")); 
        } 

      } 

     } 
+0

我做錯了這部分JSONObject obj = new JSONObject(json);因爲當我做調試時,它從這裏直接走向例外。我是否需要以任何特殊方式將鏈接放到我的JSON文件中?打開這個或某事? – carolajnn

+0

@carolajnn:給我你的JSON網址,因爲解析是正確的,在這裏新的JSONObject(JSON);你需要傳遞字符串,你已經從谷歌地點API而不是json –

+0

http://maps.google.com/maps/api/directions/json?origin=51.49,19.83&destination=51.79,19.44&sensor=true&mode=driving這裏你有我的網址 – carolajnn

相關問題