在JAVA中使用org.json访问更深层次的JSON

时间:2015-04-17 17:33:34

标签: java json org.json

下面是检索到的JSON,我已尝试了很多可能性,以便获取“status”的值,并在“geometry.location”中获取“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");

它无法检索“几何”以及“lat”和“lng”

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

4 个答案:

答案 0 :(得分:0)

您拥有的一个选项是使用JSON Path。在JSON路径中,用于检索示例数据中“状态”的表达式只是.status。 Google为此here提供了一个很好的库。您可以测试JSON路径here

您可以通过Google搜索在JSON路径上找到许多示例/教程。我很快就发现了一个似乎很全面的问题是here

答案 1 :(得分:0)

getJSONObject()返回一个对象,而不是值。尝试getString(“result”)或某些等价物:)

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

JSONObject适用于处理简单的json数据结构,例如从Hello Worlds等开始。然而,您尝试处理的json结构非常难以使用JSONObject进行解析。请停止尝试使用错误的工具进行工作。切换到更快的xml Jackson Json库。在你浪费的8个小时里,你已经学会了如何使用杰克逊并成为一名Json忍者。