web-dev-qa-db-ja.com

多くのクラスなしのGSON解析

次のJSONがあり、要素の取得のみに関心があります"status""lat"および"lng"

Gsonを使用して、JSONコンテンツを表すクラス構造全体を作成せずに、このJSONを解析してそれらの値を取得することは可能ですか?

JSON:

{
  "result": {
    "geometry": {
      "location": {
        "lat": 45.80355369999999,
        "lng": 15.9363229
      }
    }
  },
  "status": "OK"
}
27
Reeebuuk

新しいクラスを定義する必要はありません。Gsonライブラリに付属するJSONオブジェクトを使用するだけです。簡単な例を次に示します。

JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();
JsonObject locObj = rootObj.getAsJsonObject("result")
    .getAsJsonObject("geometry").getAsJsonObject("location");

String status = rootObj.get("status").getAsString();
String lat = locObj.get("lat").getAsString();
String lng = locObj.get("lng").getAsString();

System.out.printf("Status: %s, Latitude: %s, Longitude: %s\n", status,
        lat, lng);

簡潔でシンプル。同じコードを何度も繰り返している場合は、クラスを作成してマッピングを簡略化し、繰り返しをなくすことができます。

42
Perception

それは確かに可能ですが、カスタムデシリアライザを作成する必要があります。 Gsonのドキュメント here およびGson API Javadoc こちら 詳細については。また、私のその他の応答 here および も見てくださいhere ...そして、疑問がある場合はコメントしてください。

そうは言っても、私の意見では、JSON応答の単純さをさらに考慮して、対応するクラスを作成して解析する方がはるかに簡単です...通常のアプローチでは、いくつかの超単純なクラスを書くだけで済みますが、 、カスタムデシリアライザを作成しますが、それほど複雑ではありませんが、おそらくより長くかかり、後でJSONの他のデータが必要になると、適応するのが難しくなります...

Gsonには、回避策を見つけるためではなく、開発者がそれを使用するために設計された操作方法があります!

とにかく、なぜクラスを使いたくないのですか?プロジェクトに多くのクラスを含めることを望まない場合は、ネストされたクラスを使用するだけで、プロジェクトがきれいに見えます...

6
MikO