如何获取多个对象和数组的JSON数据
问题描述:
我是编程新手,我想构建一个应用程序,它从Google地图方向获取数据,并且第一个用户需要在列表视图中获取可用路线。如何获取多个对象和数组的JSON数据
我的JSON数据是这样的
{
geocoded_waypoints: [],
routes: [
{
bounds: {
},
copyrights: "Map data ©2017 Google",
legs: [
{
arrival_time: {},
departure_time: {},
distance: {},
duration: {
text: "25 mins",
value: 1514
},
end_address: "destination address, Croatia",
end_location: {},
start_address: "start address",
start_location: {},
steps: [
{
distance: {},
duration: {},
end_location: {},
html_instructions: "Walk to Vjesnik",
polyline: {},
start_location: {},
steps: [],
travel_mode: "WALKING"
},
{
distance: {},
duration: {},
end_location: {},
html_instructions: "Tram towards Dubec",
polyline: {},
start_location: {},
transit_details: {
arrival_stop: {},
arrival_time: {},
departure_stop: {},
departure_time: {},
headsign: "Dubec",
line: {
agencies: [
{
name: "Zagrebački Električni Tramvaj",
phone: "011 385 60 100 001",
url: "http://www.zet.hr/"
}
],
color: "#ffffff",
name: "Savski most - Dubec",
short_name: "4",
text_color: "#400000",
vehicle: {}
},
num_stops: 9
},
travel_mode: "TRANSIT"
},
这是在数组中的第一条路线,
我也找到了一些代码,但我不剪这是正确的,我需要去
duration: {
text: "25 mins",
value: 1514
},
- 这是腿阵列
然后在步骤数组中,我需要对象transit_details女巫有2个对象行和num_stops,并在对象行中,我有对象:名称,短名称和阵列机构。
我不确定这是否是正确的代码形式我的情况,我意识到我需要得到两个数组,父母和孩子。 我很抱歉,如果这个问题已经被问到,但你能指导我如何获得这些数据?我发现
Java代码是这样的,但我并修改它,已经把一些意见:
public class DirectionsJSONParser {
/** Receives a JSONObject and returns a list of lists containing latitude and longitude */
public List<List<HashMap<String,String>>> parse(JSONObject jObject){
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
JSONArray jRoutes = null;
JSONArray jLegs = null;
JSONObject jSteps = null;
try {
jRoutes = jObject.getJSONArray("routes");
/** Traversing all routes */
for(int i=0;i<jRoutes.length();i++){
jLegs = ((JSONObject)jRoutes.get(i)).getJSONArray("legs");
List path = new ArrayList<HashMap<String, String>>();
/** Traversing all legs */
for(int j=0;j<jLegs.length();j++){
jSteps = ((JSONObject)jLegs.get(j)).getJSONArray("steps");
jLegs = ((JSONObject)jRoutes.get(j)).getJSONArray("duration"); // --> this is my
/** Traversing all steps */
for(int k=0;k<jSteps.length();k++){
String polyline = "";
polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
List list = decodePoly(polyline);
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("transit_details"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("line"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("name"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("short_name"); // this is my
}
routes.add(path);
}
}
} catch (JSONException e) {
e.printStackTrace();
}catch (Exception e){
}
return routes;
}
/**
* Method to decode polyline points
* Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
* */
private List decodePoly(String encoded) {
List poly = new ArrayList();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng((((double) lat/1E5)),
(((double) lng/1E5)));
poly.add(p);
}
return poly;
}
}
我没有得到我所需要的数据。
感谢您的帮助。
答
好吧,我二叔得到与GSON数据,但如何把它们在列表视图 我的代码是:
private void extractTransitDetails(TransitDetailsWrapper transitDetailsWrapper) {
List<Route> routes = transitDetailsWrapper.getRoutes();
routes.size();
for (Route route : routes) {
List<Leg> legs = route.getLegs();
route.getOverviewPolyline();
for (Leg leg : legs) {
List<Step> steps = leg.getSteps();
leg.getDuration(); // vrijeme putovanja
leg.getDistance(); // udaljenost u km
for (Step step : steps) {
TransitDetails transitDetails = step.getTransitDetails();
if (transitDetails != null) {
transitDetails.getLine();
if (transitDetails.getLine() != null) {
transitDetails.getLine().getShortName();
transitDetails.getLine().getName();
}
transitDetails.getNumStops();
transitDetails.getArrivalStop().getName();
transitDetails.getDepartureStop().getName();
transitDetails.getLine().getAgencies();
}
Log.d("test", "majlajs");
}
}
}
}
看看这个博客http://wptrafficanalyzer.in/blog/driving-distance-and-travel-time-duration-between-two-locations-in-google-map-android-api-v2/你会得到距离和持续时间两个 – gaurang
发送完成响应 –