AndroidプロジェクトにGoogleのGSONを使用して、自分のWebサーバーからJSONをリクエストしたいと考えています。 JSONは...どちらかが返されますGSON:変換するオブジェクトの種類を知っていますか?
1)既知のタイプ(例えばの正常な応答:常にオンになります
{
"id":1,
"username":"bob",
"created_at":"2011-01-31 22:46:01",
"PhoneNumbers":[
{
"type":"home",
"number":"+1-234-567-8910"
},
{
"type":"mobile",
"number":"+1-098-765-4321"
}
]
}
2)不成功の応答:クラス「ユーザー」)下の同じ基本構造を使用します。
{
"error":{
"type":"Error",
"code":404,
"message":"Not Found"
}
}
私はGSONは上記error
キー/値ペアの有無に応じて、正しい型に変換したいと思います。私がこれを行うと考えることができる最も実用的な方法は次のとおりですが、より良い方法があれば私は興味があります。
final String response = client.get("http://www.example.com/user.json?id=1");
final Gson gson = new Gson();
try {
final UserEntity user = gson.fromJson(response, UserEntity.class);
// do something with user
} catch (final JsonSyntaxException e) {
try {
final ErrorEntity error = gson.fromJson(response, ErrorEntity.class);
// do something with error
} catch (final JsonSyntaxException e) {
// handle situation where response cannot be parsed
}
}
最初のキャッチ状態では、私はキーerror
はJSONレスポンスに存在するかどうかをテストするかどうかはわかりませんので、これは、しかし実際には擬似コードです。だから私の質問は2倍だと思います:
- 私はキーの存在をテストし、それに基づいて解析する方法を決定するためにGSONを使用できますか?
- GSONで同様の状況にある他の人たちがこれをやっているのですか、それとも良い方法がありますか?
エラーコードの変更は、Webアプリケーションの設定方法が簡単でなければなりません。私は周りにおもちゃにして、結果のJSONの "エラー"キーを削除するか、上記のようなものを使用して私のためにうまくいくかどうかを把握する必要があります。あなたの詳細な回答には大変感謝しています。私は本当に感謝しています! –
フォローアップのために、エラー応答が予想されるときは常にWebサーバーがHTTPステータス200を返していないことを確認しました。JSONエラー応答をカプセル化した「エラー」キーを含まないように変更しました。コード "、"メッセージ "を使用します。私はそれが望むようにすべてが今働いています。助けてくれてありがとう! –
ほぼですが、JsonDeserializerはインターフェイスなので、実装する必要があります。拡張する必要はありません。 –