0

下面是检索到的 JSON,我尝试了很多可能性来获取“geometry.location”中的“status”和“lat”、“lng”的值。

我是 JAVA 和 JSON 的新手,我花了 8 个多小时坐在电脑前尝试不同的解决方案,但它失败了。请帮助我

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Parkway",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

检索“状态”不起作用

JSONObject status = result.getJSONObject("status");

在其中检索“Geometry”以及“lat”和“lng”不起作用

JSONArray  array = result.getJSONArray("results");
for (int i = 0; i < array.length(); ++i) {
    JSONObject rec = array.getJSONObject(2);
}
4

4 回答 4

1

第一个不起作用,因为"status"在您的对象中是一个字符串,而不是一个对象。String status = result.getString("status");应该管用。(我猜你会得到一个ClassCastException?)

第二位失败,因为您试图在 的索引 2 处获取对象array,但它只有一个条目。很确定你的意思是i在循环中放一个而不是 2。

于 2015-04-17T17:54:31.710 回答
0

getJSONObject() 返回一个对象而不是值。尝试 getString("result") 或类似的东西:)

于 2015-04-17T17:48:20.147 回答
0

您拥有的一种选择是使用 JSON 路径。在 JSON 路径中,在示例数据中检索“状态”的表达式是简单的.status. Google在这里为此提供了一个不错的库。您可以在此处测试 JSON 路径。

您可以通过谷歌搜索在 JSON 路径上找到许多示例/教程。我很快发现一个似乎很不全面的就是在这里

于 2015-04-17T17:44:18.807 回答
-1

JSONObject 可以很好地处理简单的 json 数据结构,例如从 Hello Worlds 等开始。但是,您尝试处理的 json 结构使用 JSONObject 解析非常痛苦。请停止尝试使用错误的工具来完成这项工作。切换到更快的 xml Jackson Json 库。到目前为止,您已经浪费了 8 个小时,您可以学习如何使用 Jackson,并走上成为 Json 忍者的道路。

于 2015-04-17T18:59:06.807 回答