无法从Google获取LatLng放置json数组对象

时间:2018-11-21 01:12:32

标签: android json google-maps android-studio

我似乎遇到的问题是从json文件中访问“更深层次”纬度值。

正在使用以下类型的链接从Google实时访问Json文件: 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"
      },

这里是im解析为字符串后访问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 :(得分:1)

几何不是数组。以 CURLY BRACE {} 开头的JSON是一个对象,而 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数组和对象之间的区别,以及如何访问它们。干杯