我想解析從我的android程序中谷歌方向api的JSON響應。這是請求鏈接。我在這裏跳過JSON響應,因爲它太長,只需點擊鏈接就會顯示它。解析從谷歌方向api的json響應
我解析響應代碼:
try {
JSONObject responseObject = (JSONObject) new JSONTokener(responseString).nextValue();
this.responseString = responseObject.getString("status") ;
JSONArray routesArray = responseObject.getJSONArray("routes");
JSONObject route = routesArray.getJSONObject(0);
JSONArray legs ;
JSONObject leg ;
JSONArray steps ;
JSONObject dist;
Integer distance ;
if(route.has("legs")) {
legs = route.getJSONArray("legs");
leg = legs.getJSONObject(0) ;
steps = leg.getJSONArray("steps"); // EDIT : I had somehow missed this line before when copying the code from IDE to the website
int nsteps = steps.length() ;
for(int i=0;i<nsteps;i++) {
JSONObject step = steps.getJSONObject(i);
if(step.has("distance")) {
dist = (JSONObject) step.get("distance");// throws exception
//I would like to take the distance value and do something with it
//if(dist.has("value"))
// distance = (Integer) dist.get("value") ;
}
}
}
else
this.responseString = "not found" ;
} catch (Exception e) {
e.printStackTrace() ;
}
這將引發異常(再次跳過,因爲JSON響應太大堆棧跟蹤顯示了整個響應字符串。):
org.json.JSONException: Expected ':' after polyline at character 13837 of {
"routes" : [
{
"bounds" : {
"northeast" : { ....
我試過使用getJSONObject
函數代替get
,但我得到了相同的外在上。
dist = step.getJSONObject("distance");
任何人都可以請幫助我指出我在這裏錯過了什麼?我不熟悉Android上的parsin JSON,所以很可能我在某個地方犯了一個愚蠢的錯誤。謝謝。
另一個類似的帖子在這個網站,但並不完全一樣:JSON parsing of Google Maps API in Android App
感謝您向我介紹gson。它和android自己的json類一樣高效嗎? – Raiyan
它的效率很高,除此之外,代碼行數量減少了很多,代碼變得不太容易出錯。而當數據映射到對象時,它更容易在相同的情況下操作。 – user2450263
太好了,再次感謝。 – Raiyan