2016-06-10 45 views
0

我想解析一個列表中的緯度和另一個列表中的經度。 任何想法如何在android.i中實現這一點,我正在谷歌地圖上繪製路線,所以我將需要經緯度和緯度。如何解析jsonobject到兩個不同的列表

{ 
     "userData": [ 
     { 
      "Latitude": "28.597782", 
      "Longitude": "77.298256", 
      "IotName": "Bus7821", 
      "createdAt": "2016-06-10T09:23:07.244Z", 
      "updatedAt": "2016-06-10T09:23:07.244Z", 
      "id": "575a86fbaf4d65a333c1a1b6" 
     }, 
     { 
      "Latitude": "28.598390", 
      "Longitude": "77.297952", 
      "IotName": "Bus7821", 
      "createdAt": "2016-06-10T09:24:04.265Z", 
      "updatedAt": "2016-06-10T09:24:04.265Z", 
      "id": "575a8734af4d65a333c1a1b7" 
     }, 
     { 
      "Latitude": "28.598362", 
      "Longitude": "77.297866", 
      "IotName": "Bus7821", 
      "createdAt": "2016-06-10T09:25:03.522Z", 
      "updatedAt": "2016-06-10T09:25:03.522Z", 
      "id": "575a876faf4d65a333c1a1b8" 
     } 
     ] 
    } 

我的代碼片段

JSONObject parentObject = new JSONObject(buffer.toString()); 



       routeMap = parentObject.getJSONArray("userData"); 
       for (int i=0 ; i<routeMap.length();i++) 
       { 
        JSONObject routes = routeMap.getJSONObject(i); 
//      routeLatitude = routes.get("Latitude"); 
       } 
+0

使用'routes.getString(「Latitude」);''和'routes.getString(「Longitude」);'爲緯度和經度resp。 –

+1

你面臨什麼問題? – Mohit

回答

0

嘗試這樣的:

routeMap = parentObject.getJSONArray("userData"); 
         for (int i=0 ; i<routeMap.length();i++) 
         { 
           JSONObject routes = routeMap.getJSONObject(i); 
           routeLatitude = routes.getString("Latitude"); 
           routeLongitude = routes.getString("Longitude"); 
           listOne.add(routeLatitude); 
           listTwo.add(routeLongitude); 
         } 

那麼listOne和listTwo是你的兩個的ArrayList。

0

試試這個:

try { 
    List<String> lat = new ArrayList<>(); 
    List<String> lon = new ArrayList<>(); 
    JSONObject jsonObject = new JSONObject(yourJson); 
    JSONArray jsonArray = jsonObject.getJSONArray("userData"); 
    for(int i=0;i<jsonArray.length();i++) { 
     JSONObject jsonObject1 = jsonArray.getJSONObject(i); 
     String latitude = jsonObject1.getString("Latitude"); 
     String longitude = jsonObject1.getString("Longitude"); 
     lat.add(latitude); 
     lon.add(longitude); 
    } 
    System.out.print(lat + "" + lon); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

一個更好的方法是創建這樣一個POJO:

public class MyLocation 
{ 
    private String id; 
    private String updatedAt; 
    private String createdAt; 
    private String IotName; 
    private String Latitude; 
    private String Longitude; 

    //other getters and setters here 

    public String getLatitude() 
    { 
     return Latitude; 
    } 

    public void setLatitude (String Latitude) 
    { 
     this.Latitude = Latitude; 
    } 

    public String getLongitude() 
    { 
     return Longitude; 
    } 

    public void setLongitude (String Longitude) 
    { 
     this.Longitude = Longitude; 
    } 
} 

現在,你可以這樣做:

MyLocation ml = new MyLocation(); 
ml.setLatitude(latitude); 
ml.setLongitude(longitude); 

同時獲得:

ml.getLatitude(); 
ml.getLongitude(); 
+0

不會使用將兩個變量分組在一起的類比獨立列表更好嗎? –

+1

那會更好,但是我想要兩個單獨的列表 –

1

Gson圖書館是做到這一點的最佳方式。 根據你的json對象創建一個類。

class UserData { 
    double Latitude 
    double Longitude; 
    String IotName; 
    Date createdAt; 
    Date updatedAt 
    String id; 
} 

現在的GSON一行代碼會做所有的工作。

UserData[] allRoutes = new Gson().fromJson(jsonString, UserData[].class); 

希望它能起作用。 :)