java解析json fro distancematrix google api
我试图读取这个JSON响应的距离和持续时间字段java解析json fro distancematrix google api,java,json,google-maps-api-3,Java,Json,Google Maps Api 3,我试图读取这个JSON响应的距离和持续时间字段 { "destination_addresses" : [ "342 E 110th St, New York, NY 10029, USA" ], "origin_addresses" : [ "303 E 43rd St, New York, NY 10017, USA" ], "rows" : [ { "elements" : [ { "d
{
"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);
但代码的结果是:
线程主java.lang.ClassCastException中的异常:org.json.simple.JSONObject无法转换为org.json.simple.JSONArray
我怎样才能修好它?有比这更简单的方法吗?
谢谢这里的问题是距离不是数组
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");
如果需要double,则需要删除字符串的km部分,然后对其进行解析
例如:
distance = distance.replace(" km", "").trim();
double value = Double.parseDouble(distance);
GetDistanceObj.getdistance返回JSONObject。