2014-12-23 2 views
-2

Я пытаюсь прочитать объект json (или массив, tbh, я не уверен, что это, черт возьми). В любом случае, я должен указать, что вчера начал работать с json-массивами, так что извините, если это простой вопрос.JSONObject не может быть преобразован в JSONArray и наоборот?

Вот что происходит:

//doesn’t work 

JSONArray valarray = new JSONArray(result); 

дает эту ошибку: type org.json.JSONObject cannot be converted to JSONArray

//works 

JSONObject jsonObject = new JSONObject(result); 

Log.v("RESULTS" , jsonObject.get("results").toString()); 

//Doesn’t work 

JSONObject jsonObject = new JSONObject(result); 

JSONObject resultsObject = jsonObject.getJSONObject("results"); 

дает эту ошибку: type org.json.JSONArray cannot be converted to JSONObject

Вот JSON:

{ 
    "html_attributions" : [], 
    "results" : [ 
    { 
     "geometry" : { 
     "location" : { 
      "lat" : 50.6, 
      "lng" : -0.00 
     } 
     }, 
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png", 
     "id" : "242c6a9664ca28a2", 
     "name" : "whatever", 
     "place_id" : "ChIJ6xum8T", 
     "reference" : "CoQBdQAAAIp", 
     "scope" : "GOOGLE", 
     "types" : [ "establishment" ], 
     "vicinity" : "United Kingdom" 
    } 
    ], 
    "status" : "OK" 
} 

Как я полагаю, чтобы получить lat и lng внутри geometry, например?

+0

Я переформатировать свой JSON, так что вы можете см. различные уровни. –

+0

Вы не можете преобразовать объект JSON в массив JSON или наоборот. Это разные вещи. Перейдите на json.org и изучите синтаксис JSON - для изучения требуется всего 5-10 минут. –

+0

И убедитесь, что документация, специфичная для Java, находится по адресу http://www.json.org/java/. –

ответ

1

Ваш JSON состоит из object. То, что object содержит массив с именем results. Массив содержит object элементов. Каждый object в массиве содержит object с именем geometry. Этот объект содержит object с именем location. То, что object содержит lat и lng значения с плавающей запятой.

Итак, ваш код должен выглядеть следующим образом:

String json = ...; 
JSONObject JsonObj = new JSONObject(json); 
JSONArray ResultArr = JsonObj.getJSONArray("result"); 
JSONObject ResultObj = ResultArr.getJSONObject(0); 
JSONObject Geometry = ResultObj.getJSONObject("geometry"); 
JSONObject Location = Geometry.getJSONObject("location"); 
double Latitude = Location.getDouble("lat"); 
double Longitude = Location.getDouble("lng"); 

Поскольку вы имеете дело с массивом, вы можете перемещаться по нему, как это:

String json = ...; 
JSONObject JsonObj = new JSONObject(json); 
JSONArray ResultArr = JsonObj.getJSONArray("result"); 
int count = ResultArr.length(); 
for (int i = 0; i < count; ++i) 
{ 
    JSONObject ResultObj = ResultArr.getJSONObject(i); 
    JSONObject Geometry = ResultObj.getJSONObject("geometry"); 
    JSONObject Location = Geometry.getJSONObject("location"); 
    double Latitude = Location.getDouble("lat"); 
    double Longitude = Location.getDouble("lng"); 
    //... 
} 
+0

Отличный ответ. Спасибо, это работает! – Adz

Смежные вопросы