【问题标题】:java parsing json fro distancematrix google apijava从距离矩阵google api解析json
【发布时间】:2017-12-18 20:11:15
【问题描述】:

我正在尝试读取此 JSON 响应的 distanceduration 字段

 {
   "destination_addresses" : [ "342 E 110th St, New York, NY 10029, USA" ],
   "origin_addresses" : [ "303 E 43rd St, New York, NY 10017, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "6.9 km",
                  "value" : 6853
               },
               "duration" : {
                  "text" : "15 mins",
                  "value" : 926
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

这是我的代码

try {           
   InputStream is = new URL("https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=40.750404,-73.971489&destinations=40.79248,-73.938805").openStream();      
   BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
   json = readAll(rd);
} catch(Exception e) {
}
JSONParser parser = new JSONParser();

Object obj = parser.parse(json);
JSONObject jb = (JSONObject) obj;

JSONArray jsonObject1 = (JSONArray) jb.get("rows");
JSONObject jsonObject2 = (JSONObject)jsonObject1.get(0);
JSONArray jsonObject3 = (JSONArray)jsonObject2.get("elements");
JSONObject distanceObj = (JSONObject) jsonObject3.get(0);
JSONArray distanceArr = (JSONArray)distanceObj.get("distance");

double distance_text= (double) distanceArr.get(0); 
System.out.println( "distance = "+distance_text);

但代码导致:

线程“main”java.lang.ClassCastException 中的异常:org.json.simple.JSONObject 无法转换为 org.json.simple.JSONArray

我该如何解决?还有比这更简单的方法吗? 谢谢

【问题讨论】:

  • distanceObj.get("distance") 返回JSONObject

标签: java json google-maps-api-3


【解决方案1】:

这里的问题是distance不是一个数组。

JSONArray jsonObject1 = (JSONArray) jb.get("rows");
JSONObject jsonObject2 = (JSONObject)jsonObject1.get(0);
JSONArray jsonObject3 = (JSONArray)jsonObject2.get("elements");
JSONObject elementObj = (JSONObject) jsonObject3.get(0);
JSONObject distanceObj = (JSONObject)elementObj.get("distance");
String distance = distanceObj.getString("text");

如果您想要双精度,则需要删除字符串的km 部分,然后对其进行解析。

例如:

distance = distance.replace(" km", "").trim();
double value = Double.parseDouble(distance);

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多