与没有POJO的Gson一起解析Json?

时间:2017-10-20 02:44:19

标签: java json parsing gson pojo

希望有人在这里轻松解决问题。我知道有类似的问题,但我似乎无法修改它们以解决我的问题。

我试图在这个json响应中解析“formatted_address”的字符串:

    {
    "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Google Building 42",
               "short_name" : "Google Bldg 42",
               "types" : [ "premise" ]
            },
            {
               "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" : "Google Bldg 42, 1600 Amphitheatre Pkwy, Mountain 
    View, CA 94043, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 37.42198310000001,
                  "lng" : -122.0853195
               },
               "southwest" : {
                  "lat" : 37.4214139,
                  "lng" : -122.0860042
               }
            },
            "location" : {
               "lat" : 37.4216548,
               "lng" : -122.0856374
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4230474802915,
                  "lng" : -122.0843128697085
               },
               "southwest" : {
                  "lat" : 37.4203495197085,
                  "lng" : -122.0870108302915
               }
            }
         },
         "place_id" : "ChIJPzxqWQK6j4AR3OFRJ6LMaKo",
         "types" : [ "premise" ]
      }
   ],
   "status" : "OK"
    }

以前使用gson时,我可以使用以下方法立即解析我的结果:

Gson gson = new Gson();

    JsonArray body = gson.fromJson(ResultString, JsonArray.class);
    System.out.println(body.get(0).getAsJsonObject().get("elementnamehere").getAsString());

主要区别在于我无法将此结果放入JsonArray体中。相反(我相信,因为它有嵌套数据)我必须使它成为一个JsonObject,但我无法解析它为我的生活而没有得到Null。没有制作POJO或响应类的任何简单方法吗?如果没有,有人可以解释如何/为什么这样做:

Parsing nested JSON data using GSON

2 个答案:

答案 0 :(得分:9)

你几乎就在那里,你是正确的,你需要解析JsonObject

JsonObject body = gson.fromJson(json, JsonObject.class);
JsonArray results = body.get("results").getAsJsonArray();
JsonObject firstResult = results.get(0).getAsJsonObject();
JsonElement address = firstResult.get("formatted_address");
System.out.println(address.getAsString());

答案 1 :(得分:0)

您可以做到,但不必一定要使用GSON。

  

您可以使用Jackson将JSON解析为Java对象

。例如,您可以获取:没有POJO类的Object,List,Hashmap,Integer,String等。

在android中,首先添加以下行:

s.operator()

下一步导入映射器

implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.0.1'

最后,您可以使用传递String JSON值的映射器,例如:

import com.fasterxml.jackson.databind.ObjectMapper

我希望它能对您有所帮助。要了解有关杰克逊的更多信息,请访问:Jackson