Проблема Получение LatLng из Google помещает объект массива json - PullRequest
0 голосов
/ 21 ноября 2018

Проблема, с которой я, похоже, сталкиваюсь, - это доступ к значениям широты "более глубокого уровня" из файла json.

Доступ к файлу Json в реальном времени осуществляется из Google с помощью ссылки этого типа: https://maps.googleapis.com/maps/api/place/nearbysearch/json?

Вот как выглядит один объект / массив в json, включая «верхний уровень»"Результаты".

"results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : 55.4628609,
               "lng" : -4.6299348
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 55.46420472989273,
                  "lng" : -4.628674020107278
               },
               "southwest" : {
                  "lat" : 55.46150507010728,
                  "lng" : -4.631373679892723
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/shopping-71.png",
         "id" : "0655ceeeddd83f1a901bcef361b22cbfa951ae73",
         "name" : "GAME",
         "opening_hours" : {
            "open_now" : false
         },
         "place_id" : "ChIJM8hBpZ3WiUgRuWc3KhfMJys",
         "plus_code" : {
            "compound_code" : "F97C+42 Ayr, UK",
            "global_code" : "9C7QF97C+42"
         },
         "rating" : 4.2,
         "reference" : "ChIJM8hBpZ3WiUgRuWc3KhfMJys",
         "scope" : "GOOGLE",
         "types" : [ "electronics_store", "store", "point_of_interest", "establishment" ],
         "vicinity" : "120 High St, Ayr"
      },

Вот метод, который я использую для доступа к данным файла json после того, как он был проанализирован в строку.

  void createMarkersFromJson(String json) throws JSONException {
        JSONObject object = new JSONObject(json);
        JSONArray jsonArray = object.getJSONArray("results");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObj = jsonArray.getJSONObject(i);

            map.addMarker(new MarkerOptions()
                    .title(jsonObj.getString("name"))
                    .position(new LatLng(
                            jsonObj.getJSONArray("geometry").getDouble(0),
                            jsonObj.getJSONArray("geometry").getDouble(1)
                    ))
            );
        }
    }

1 Ответ

0 голосов
/ 21 ноября 2018

Геометрия не является массивом.JSON, начинающийся с CURLY BRACE {} , является объектом, а BRACKET [] обозначает массив.Попробуйте это.

    JSONArray jsonArray= object.getJSONArray("results");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        JSONObject locationObj = jsonObj .getJSONObject("geometry")
                                       .getJSONObject("location");

        map.addMarker(new MarkerOptions()
                .title(jsonObj.getString("name"))
                .position(new LatLng(
                        locationObj.getDouble("lat"),
                        locationObj.getDouble("lng")
                ))
        );
    }

Надеюсь, это поможет вам прояснить разницу между массивом JSON и объектом и узнать, как получить к ним доступ.Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...