1. private void testParseJson() {
  2.         string objectJson = "{\"data\":{\"0\":{\"name\":\"abc\",\"age\":18},\"1\":{\"name\":\"abc\",\"age\":18},\"2\":{\"name\":\"abc\",\"age\":18}}}";
  3.         string arrayJson = "{\"data\":[{\"name\":\"abc\",\"age\":18},{\"name\":\"abc\",\"age\":18},{\"name\":\"abc\",\"age\":18}]}";
  4.  
  5.         GsonBuilder gsonBuilder = new GsonBuilder();
  6.         JsonDeserializer<TestObject> deserializer = new JsonDeserializer<TestObject>() {
  7.             @Override
  8.             public TestObject deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
  9.                 JsonObject jsonObject = json.getAsJsonObject();
  10.                 JsonElement data = jsonObject.get("data");
  11.                 if (data.isJsonArray()) {
  12.                     return new Gson().fromJson(jsonObject, TestObject.class);
  13.                 } else {
  14.                     JsonObject dataObject = data.getAsJsonObject();
  15.                     Set<map.Entry<string, JsonElement>> entries = dataObject.entrySet();
  16.                     TestObject testObject = new TestObject();
  17.                     List<DataItem> dataItems = new ArrayList<>();
  18.                     for (map.Entry<string, JsonElement> entry : entries) {
  19.                         DataItem dataItem = new DataItem();
  20.                         JsonObject item = entry.getValue().getAsJsonObject();
  21.                         dataItem.setName(item.getAsJsonPrimitive("name").getAsString());
  22.                         dataItem.setAge(item.getAsJsonPrimitive("age").getAsInt());
  23.                         dataItems.add(dataItem);
  24.                     }
  25.                     testObject.setData(dataItems);
  26.                     return testObject;
  27.                 }
  28.             }
  29.         };
  30.         gsonBuilder.registerTypeAdapter(TestObject.class, deserializer);
  31.  
  32.         Gson customGson = gsonBuilder.create();
  33.         try {
  34.             TestObject objectJsonModel = customGson.fromJson(objectJson, TestObject.class);
  35.             TestObject arrayJsonModel = customGson.fromJson(arrayJson, TestObject.class);
  36.             Timber.d(objectJsonModel.toString());
  37.             Timber.d(arrayJsonModel.toString());
  38.         } catch (exception e) {
  39.             Timber.e(e);
  40.         }
  41.     }