Я использую Google GSON для моего проекта Android, который будет запрашивать JSON с моего веб-сервера.Возвращенный JSON будет либо ...
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.Поэтому я полагаю, что мой вопрос состоит из двух частей:
- Могу ли я / как я могу использовать GSON для проверки существования ключа и принять решение о том, как выполнить анализ на основе этого?* Это то, что другие в подобной ситуации делают с GSON, или есть лучший способ?