从Json Android获取多个对象

时间:2016-10-11 11:51:30

标签: android arrays json jsonobject

我希望从中获取数据,但这会令人困惑,怎么做。 我想要进入腿部。在腿距离然后文本。 然后在步骤之后,再次步骤距离然后再发短信。

"路线" ==> "腿" - >距离 - >文本

然后开始行动 "路线" ==> "腿" ==> "步骤" - >距离 - >文本

首先是对象然后数组再次反对它太混乱了。任何帮助将不胜感激。

set format

3 个答案:

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

希望这有用:)