web-dev-qa-db-ja.com

POJOなしでGsonを使用してJsonを解析しますか?

ここに誰かからの簡単な解決策があることを願っています。同様の質問があることはわかっていますが、自分の問題に対処するように変更することができないようです。

この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または応答クラスを作成せずにこれを行う簡単な方法はありますか?そうでない場合、誰かがそのようにする方法/理由を説明できますか?

GSONを使用してネストされたJSONデータを解析

8
Tevor

あと少しで、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());
14
zafrost

できますが、GSONを使用する必要はありません。

JSONをJava Jacksonを使用したオブジェクトとして解析できます

。たとえば、POJOクラスなしでオブジェクト、リスト、ハッシュマップ、整数、文字列などを取得できます。

Android最初に、次の行をgradleに追加します:

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

次にマッパーをインポートする

import com.fasterxml.jackson.databind.ObjectMapper

最後に、マッパーを使用してString JSON値を渡すことができます。例:

HashMap<*,*> object = new ObjectMapper().readValue(body, HashMap.class);

お役に立てば幸いです。ジャクソンの詳細については、以下をご覧ください。 Jackson