Parse Json ответ Android-модификация для динамических значений - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь разобрать ответ JSON в Android.Но не в состоянии обрабатывать динамический формат JSON.

Вот ответ JSON:

{
   "code":"1",
   "data":{
      "220":{
         "reg_no":"12",
         "device_status":"off"
      },
      "218":{
         "reg_no":"11",
         "device_status":"on"
      }
   }
}

220 и 219 - это динамические значения.

Вызов API из MainActivity.java

public void getItemData() {

    Call<ItemData> call = service.getItemData(token,vehicle_ids);
    call.enqueue(new Callback<ItemData>() {
        @Override
        public void onResponse(@NonNull Call<ItemData> call,@NonNull Response<ItemData> response) {
            Log.d("Response",response.body.toString());

            progressDoalog.dismiss();

        }

        @Override
        public void onFailure(@NonNull Call<ItemData> call,@NonNull Throwable t) {
            progressDoalog.dismiss();

        }
    });
}

СоздатьКласс ItemData для обработки ответа:

ItemData.java

public class VehicleList {

    private String code;
    private VehicleData data = new VehicleData();


    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public VehicleData getData() {
        return data;
    }

    public void setData(VehicleData data) {
        this.data = data;
    }

}

VehicleData.java

public class VehicleData{

}

Я получаю ответ:

code: 1
data : null

Пожалуйста, предложите мне Как мне изменить мой класс VehicleData.java, чтобы я мог обработать ответ.

1 Ответ

0 голосов
/ 24 мая 2019

То же самое можно сделать и с помощью GSON, но вместо использования конвертера-адаптера GSON для преобразования в POJO.мы будем разбирать его вручную.что дает нам гибкость в случае динамических данных JSON.скажем, в моем случае формат JSON выглядит следующим образом:

  {
       "code":"1",
       "data":{
          "220":{
             "reg_no":"12",
             "device_status":"off"
          },
          "218":{
             "reg_no":"11",
             "device_status":"on"
          }
       }
    }

, в этом случае dateWiseContent имеет динамические ключи объекта, поэтому мы проанализируем эту строку json с помощью класса JsonParser.

 //parsing string response to json object
 JsonObject jsonObject = (JsonObject) new JsonParser().parse(resource);
  //getting root object
 JsonObject data = jsonObject.get("data").getAsJsonObject();

получить динамические ключи с помощью Map.Entry, как указано ниже

// your code goes here
         for (Map.Entry<String, JsonElement> entry : data.entrySet()) {

           //this gets the dynamic keys
            String  dateKey = entry.getKey();

            //you can get any thing now json element,array,object according to json.

            JsonArray jsonArrayDates = entry.getValue().getAsJsonArray();
            int appointmentsSize = jsonArrayDates.size();

             for (int count = 0; count < appointmentsSize; count++) {

                   JsonObject objectData = jsonArrayDates.get(count).getAsJsonObject();
                   String device_status = objectData.get("device_status").getAsString();


             }
        }

аналогично любой уровень динамического json может быть проанализирован с помощью Map.Entry

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