Обрабатывать JSON-ответ - JsonArray и JsonObject для одного и того же атрибута на основе ответа - Java - Модернизация Android - PullRequest
0 голосов
/ 04 ноября 2018

Я получаю два типа ответа Json.

Один из них:

{
  "status": true,
  "datetime": "",
  "data": [
    {
      "name": "xxx"
    }
  ]
}

Другой формат:

{
  "status": true,
  "datetime": "",
  "data":
  {
    "name": "aaa"
  }
}

Объект "data" будет JsonObject для некоторого ответа и JsonArray для какого-либо ответа, как обрабатывать оба типа запроса.

Я использую Retrofit API для связи.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы можете получить «данные» как JsonElement и проверить его: JsonObject или JsonArray соответственно. Например, вы можете написать custom JsonDeserializer:

class CustomDeserializer implements JsonDeserializer<YourModel> {

    @Override
    public YourModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject responseObj = json.asJsonObject;
        JsonElement data = responseObj.get("data");
        // get your dinamic data
        if (data.isJsonObject()) {
        // parse as object
        } else if (data.isJsonArray()) {
        // parse as array
        }
    }
0 голосов
/ 04 ноября 2018

Если вы используете GsonConverterFactory, вы можете использовать JsonElement для представления JsonObject и JsonArray, так как оба они расширяют JsonElement.

Тогда вы можете использовать метод JsonElement#isJsonArray(), чтобы проверить и действовать соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...