我希望从中获取数据,但这会令人困惑,怎么做。 我想要进入腿部。在腿距离然后文本。 然后在步骤之后,再次步骤距离然后再发短信。
"路线" ==> "腿" - >距离 - >文本
然后开始行动 "路线" ==> "腿" ==> "步骤" - >距离 - >文本
首先是对象然后数组再次反对它太混乱了。任何帮助将不胜感激。
set format
答案 0 :(得分:2)
手动方式:
简而言之,Json为您提供了对象(beetwen {})或数组(beetwen [])。要从json深处得到某些东西,你必须经历每个级别。你只放了json的片段,但我关闭了它,我们在启动json对象时(因为主括号是{}):
{
"geocoded_waypoints" : [
{
"geocoder_status" : "OK",
"place_id" : "ChIJ2QeB5YMEGTkRYiR-zGy-OsI",
"types" : [ "locality", "political" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJ2afeeFcxOzkRL9RVTscv17o",
"types" : [ "locality", "political" ]
}
],
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 31.55462439999999,
"lng" : 74.3571711
},
"southwest" : {
"lat" : 30.1981178,
"lng" : 71.4687352
}
},
"copyrights" : "Map data ©2016 Google",
"legs" : [
{
"distance" : {
"text" : "348 km",
"value" : 347978
},
"duration" : {
"text" : "4 hours 49 mins",
"value" : 17335
},
"end_address" : "Multan, Pakistan",
"end_location" : {
"lat" : 30.1981178,
"lng" : 71.4687352
},
"start_address" : "Lahore, Pakistan",
"start_location" : {
"lat" : 31.55462439999999,
"lng" : 74.3571711
},
"steps" : [
{
"distance" : {
"text" : "67 m",
"value" : 67
},
"duration" : {
"text" : "1 min",
"value" : 9
},
"end_location" : {
"lat" : 31.5549532,
"lng" : 74.3565735
},
"html_instructions" : "Head \u003cb\u003enorthwest\u003c/b\u003e on \u003cb\u003eAllama Iqbal Rd\u003c/b\u003e",
"polyline" : {
"points" : "k_r_Ei{ydM[r@e@bA"
},
"start_location" : {
"lat" : 31.55462439999999,
"lng" : 74.3571711
},
"travel_mode" : "DRIVING"
}]
}
]
}
]
}
我们假设您将此作为名为" jsonString"的字符串。您可以像这样创建json对象:
JSONObject jsonObject = new JSONObject(jsonString);
比你需要的"路线"这是json数组(在[]括号之间)。您创建此数组将更深入到主jsonObject:
JSONArray routesArray = jsonObject.getJSONArray("routes");
要遍历每个数组元素(即json对象),你会像这样迭代:
for (int i = 0; i < routesArray.length(); i++) {
//do sth
}
你得到了你的腿#34;像这样:
JSONObject routeObject = routesArray.get(i);
routeObject.get("legs");
像上面那样越来越深。
<强>自动强>
使用Gson库和一些Json Pojo解析器要容易得多。
您在build.gradle中导入gson:
compile 'com.google.code.gson:gson:2.4'
您可以使用此parser。选择源类型&#34; JSON&#34;和#34;注释风格&#34; GSON。将您的json放在文本框中,然后单击预览或下载ZIP。您也可以放置包名和主类名,或稍后手动重命名。您将获得多个模型类,其中前一个名为&#34;示例&#34;或你的名字。它由两个字段组成:
public class Example {
@SerializedName("geocoded_waypoints")
@Expose
private List<GeocodedWaypoint> geocodedWaypoints = new ArrayList<GeocodedWaypoint>();
@SerializedName("routes")
@Expose
private List<Route> routes = new ArrayList<Route>();
将所有类添加到项目中,然后将jsonString解析为主类,如下所示:
Example mainClassObject = new Gson().fromJson(jsonString, Example.class);
现在您可以从此对象访问路线。从路线和更深更深的腿......
答案 1 :(得分:0)
请尝试下面的代码来解析提供的json键值:
values
我认为上面的代码可能很难让你在这个阶段理解,但是一旦你理解了它对你未来的JSON解析会更有帮助。
答案 2 :(得分:0)
你可以通过第三方(Gson,Logan Square等)进行解析。如果您尝试直接访问它。您可以在下面找到访问“legs”数组的示例代码。
让我们假设
JsonObject jsonObject = new JsonObject("json string");
这个“jsonObject”是完整的json值,您可以从中访问“legs”数组。在这种情况下,“legs”数组位于“routes”数组中。所以我们需要首先获取“routes”数组并循环该数组并从每个对象获取“legs”数组并存储在POJO类中,或者如果您想从“距离”单独获取“文本”意味着您可以存储在你需要的arraylist或字符串中。下面是单独获取文本的示例代码。
JsonArray routesArray = jsonObject.optJsonArray("routes");
if (routesArray != null) {
for (int i = 0; i < routesArray.length(); i++) {
JsonArray legsArray = routesArray.get(i).optJsonArray("legs");
if (legsArray != null) {
for (int i = 0; i < legsArray.length(); i++) {
JsonObject legObject = legsArray.get(i);
JsonObject distanceObject = legObject.optJsonObject("distance");
String textValue = distanceObject.optString("text");
}
}
}
}
希望这有用:)