Модифицируйте ответ с помощью динамических имен массивов JSON - PullRequest
0 голосов
/ 02 марта 2019

В моем случае у меня есть следующий ответ json:

{
    "all": {
        "loc1": [
            {
                "userId": "1",
                "userName": "user1"
            },
            {
                "userId": "2",
                "userName": "user2"
            },
            {
                "userId": "2",
                "userName": "user2"
            },
            {
                "userId": "1",
                "userName": "user1"
            },
            {
                "userId": "2",
                "userName": "user2"
            }
        ],
        "loc2": [
            {
                "userId": "1",
                "userName": "user1"
            },
            {
                "userId": "2",
                "userName": "user2"
            },
            {
                "userId": "2",
                "userName": "user2"
            },
            {
                "userId": "1",
                "userName": "user1"
            },
            {
                "userId": "2",
                "userName": "user2"
            }
        ]
    }
}

Но теперь имена массивов loc1 и loc2 создаются динамически.Как получить ответ «всего» массива json и, кроме того, имена динамически создаваемых массивов.Я пытался что-то вроде этого:

class EventResponse() {
    @SerializedName("all")
    val events: List<List<Event>> = mutableListOf()
}

Но я получаю ошибку:

Ожидается BEGIN_ARRAY, но был BEGIN_OBJECT.

Как я могу получить динамически созданные массивы и их имена тоже

1 Ответ

0 голосов
/ 02 марта 2019

в этом случае вы можете использовать JSONObject для получения динамического значения, просто преобразуйте ответ на модификацию в JSONObject, для этого вам нужно изменить тип ответа на модификацию. Call

Call<ResponseBody> call = exampleApi();

call.enqueue(new Callback<ResponseBody>() {

  @Override
  public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
  String result = response.body().string();
  JSONObject object = new JSONObject(result);

 // can get any value from keys
 // for example in your case
  JSONArray array1 =  object.getJSONObject('all').getJSONArray('loc1');
 //similarly just change key to loc2 and so on

  JSONArray array2 =  object.getJSONObject('all').getJSONArray('loc2');

 }

 @Override
 public void onFailure(Throwable t) { 

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