2015-06-21 4 views
0

Я получаю ответ JSON от API Google, который я пытаюсь проанализировать. Но я получаю org.json.JSONException.Невозможно разобрать google places Ответ JSON - org.json.JSONException

Это мой ответ JSON.

https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJbf6hrtZ2AjoRwUPd_nrhVjM&key=AIzaSyBWKQHS39-SYUNxEEAry1FxrMET2NwhqxE

Я использую следующий код для извлечения форматированного адреса.

try { 

     Log.e("test-ttt", jsonResults.toString()); 

     // Create a JSON object hierarchy from the results 
     JSONObject jsonObj = new JSONObject(jsonResults.toString()); 

     JSONObject placeDetailsJsonArray = jsonObj.getJSONObject("result"); 

     // Extract the Place descriptions from the results 
     placeDetails = "NAME: " + placeDetailsJsonArray.getJSONObject("name").toString(); 
     placeDetails += "ADDRESS: " + placeDetailsJsonArray.getJSONObject("formatted_address").toString(); 


    } catch (JSONException e) { 
     Log.e(TAG, "Cannot process JSON results", e); 
    } 

это исключение LogCat я получаю:

org.json.JSONException: Value South Point School at name of type java.lang.String cannot be converted to JSONObject 
     at org.json.JSON.typeMismatch(JSON.java:100) 
     at org.json.JSONObject.getJSONObject(JSONObject.java:578) 
     at manasthemarvel.triptimeline.PlaceAPI.getPlaceDetails(PlaceAPI.java:78) 
     at manasthemarvel.triptimeline.placeInfo.doInBackground(placeInfo.java:14) 
     at manasthemarvel.triptimeline.placeInfo.doInBackground(placeInfo.java:10) 
     at android.os.AsyncTask$2.call(AsyncTask.java:288) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
     at java.lang.Thread.run(Thread.java:841) 


     // Extract the Place descriptions from the results 
     placeDetails = "NAME: " + placeDetailsJsonArray.getJSONObject("name").toString(); 
     placeDetails += "ADDRESS: " + placeDetailsJsonArray.getJSONObject("formatted_address").toString(); 

Что я здесь делаю неправильно?

ответ

2

Вы обрабатываете «имя» и «formatted_address» как JSONObject вместо обычной пары «ключ/значение».

Попробуйте это:

JSONObject placeDetailsJsonArray = jsonObj.getJSONObject("result"); 
String name = placeDetailsJsonArray.getString("name"); 
0

Я не знаю, что jsonResults есть, но, скорее всего, делать jsonResults.toString() здесь:

JSONObject jsonObj = new JSONObject(jsonResults.toString()); 

не дает допустимую строку JSON. Вы должны проверить, что вы обрабатываете (сделайте Log.d("X", jsonResults.toString());), вместо того, чтобы показывать, что производит удаленный API.

0

имени и formatted_address оба строк в формате JSON, но вы пытаетесь получить его как JSONObject. Вместо этого используйте что-то вроде

placeDetails = "NAME: " + placeDetailsJsonArray.get("name").getAsString(); 
placeDetails += "ADDRESS: " + placeDetailsJsonArray.get("formatted_address").getAsString(); 
Смежные вопросы