【问题标题】:Parsing JSON from the google maps DistanceMatrix api in android从 android 中的谷歌地图 DistanceMatrix api 解析 JSON
【发布时间】:2015-04-03 21:13:01
【问题描述】:

我是 android 开发新手和 JSON 新手。我正在使用谷歌地图距离矩阵 api。我相信我已经正确地将 JSON 下载到 JSONObject 中。(我从另一篇文章中偷了代码来完成它)。但是我似乎无法正确解析 JSON。我已经为此工作了几天,完全被难住了。我在下面给谷歌打了以下电话

https://maps.googleapis.com/maps/api/distancematrix/json?origins=1600%20pennsylvania%20avenue&destinations=1500%20college%20street&mode=driving&units=imperial

输出是这样的:

{
   "destination_addresses" : [ "1500 College Street, Beaumont, TX 77701, USA" ],
   "origin_addresses" : [ "1600 Pennsylvania Avenue, Hagerstown, MD 21742, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "1,306 mi",
                  "value" : 2102536
               },
               "duration" : {
                  "text" : "18 hours 48 mins",
                  "value" : 67684
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

我试过了:

1.

JSONArray jsonArray = jObject.getJSONArray("rows");
JSONArray routes = jsonArray.getJSONArray(0);
stringBuilder.append(routes.getJSONObject(0).getString("text"));

2.

JSONArray jsonArray = jObject.getJSONArray("rows");
JSONObject routes = jsonArray.getJSONObject(0);
stringBuilder.append(routes.getJSONObject("distance").getString("text"));

3.

JSONArray jsonArray = jObject.getJSONArray("elements");                    stringBuilder.append(routes.getJSONObject(0).getString("text"));

我尝试了更多,但在我看来,它们应该可以工作。对我来说,行似乎是一个数组,而元素也是一个数组。因此,我需要从原始 JSONObject 中获取行,然后从行数组中获取元素数组,然后从该数组中获取距离对象,最后获取文本值并将其添加到我的字符串生成器中较早创建。 我做错了吗?提前感谢您的帮助。

【问题讨论】:

  • 我几乎尝试了所有方法,但它不断抛出不同的异常。 然后向我们展示你尝试了什么以及你得到了什么异常......也在向谷歌询问这些之前例外...
  • 我对其进行了编辑以显示其中的一些内容。我确实谷歌了例外。然而,我认为这没有任何意义。例如,如果它说 jsonArray 对象位置 0 的东西不是数组。但是,元素不是数组吗?
  • rows 是一个数组。那么 first element 是一个对象。那么这个对象的elements 属性是一个数组。那么 first element 是一个具有distance 属性的对象...这是一个具有text 属性的对象...在第二个中您几乎就在那里...但是您忘记了elements数组
  • 好吧,有道理。非常感谢!

标签: java android json google-maps


【解决方案1】:

这对我有用

//httpResponse is the output of google api
JSONObject jsonRespRouteDistance = new JSONObject(httpResponse)
                                        .getJSONArray("rows")
                                        .getJSONObject(0)
                                        .getJSONArray ("elements")
                                        .getJSONObject(0)
                                        .getJSONObject("distance");

String distance = jsonRespRouteDistance.get("text").toString();

/* 
* For distance, below is only partial solution as the 
* output to string destination_addr will contain square brackets [] and double codes ""
* Eg. [ "1600 Pennsylvania Avenue, Hagerstown, MD 21742, USA" ]
* 
*/
String destination_addr = new JSONObject(httpResponse)
                            .get("destination_addresses")
                            .toString();

[更新]

假设我们只有一个目标地址而不是多个。一点点字符串操作就可以得到没有代码 " 和括号 []

的干净字符串
StringBuilder stringBuilderDestinationAddr = new StringBuilder();

for (int i = 0; i < destination_addr.length(); i++)
    if (destination_addr.charAt(i) != '[' && destination_addr.charAt(i) != ']' && destination_addr.charAt(i) != '"')
         stringBuilderDestinationAddr.append(pickup_addr.destination_addr (i));

String strCleanDestination = stringBuilderDestinationAddr.toString();

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多