次のJSONがあり、要素の取得のみに関心があります"status"
、"lat"
および"lng"
。
Gsonを使用して、JSONコンテンツを表すクラス構造全体を作成せずに、このJSONを解析してそれらの値を取得することは可能ですか?
JSON:
{
"result": {
"geometry": {
"location": {
"lat": 45.80355369999999,
"lng": 15.9363229
}
}
},
"status": "OK"
}
新しいクラスを定義する必要はありません。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);
簡潔でシンプル。同じコードを何度も繰り返している場合は、クラスを作成してマッピングを簡略化し、繰り返しをなくすことができます。
それは確かに可能ですが、カスタムデシリアライザを作成する必要があります。 Gsonのドキュメント here およびGson API Javadoc こちら 詳細については。また、私のその他の応答 here および も見てくださいhere ...そして、疑問がある場合はコメントしてください。
そうは言っても、私の意見では、JSON応答の単純さをさらに考慮して、対応するクラスを作成して解析する方がはるかに簡単です...通常のアプローチでは、いくつかの超単純なクラスを書くだけで済みますが、 、カスタムデシリアライザを作成しますが、それほど複雑ではありませんが、おそらくより長くかかり、後でJSONの他のデータが必要になると、適応するのが難しくなります...
Gsonには、回避策を見つけるためではなく、開発者がそれを使用するために設計された操作方法があります!
とにかく、なぜクラスを使いたくないのですか?プロジェクトに多くのクラスを含めることを望まない場合は、ネストされたクラスを使用するだけで、プロジェクトがきれいに見えます...