Получение свойства объекта с нефиксированными ключами

Предположим, я получил этот ответ JSon от веб-службы:

{
    "id":13,
    "name":"Alireza",
    "required_id":"14",
    "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }
}

В этом ответе значение required_id указывает, что мне нужно имя друга с идентификатором 14, поэтому в объекте all_friends_id_and_name я должен получить значение «14» (Taha) и использовать его в своем приложении.

Я использую библиотеки retrofit2 и gson.

Как получить свойство объекта с нефиксированными ключами?

см. stackoverflow.com/questions/20419217/… и stackoverflow.com/questions/7091054/…, я не думаю, что gson можно использовать

Manohar 10.09.2018 09:15
3
1
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для собственного подхода вы можете попробовать с Iterator.

An iterator is an object that enables a programmer to traverse a container, particularly lists.

 "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }

Для указанного выше раздела ваш LOGIC будет

     JSONObject jsonData = new JSONObject("Json_response");
          Iterator  iteratorObj = jsonData .keys();
           while (iteratorObj.hasNext())
            {
                String str_json_Key = (String)iteratorObj.next();
                 // Print=28,21....96
             }

так что нет решения с использованием библиотеки gson? и если ответ «Нет», как получить значение «all_friends_id_and_name» в виде строки? это запрос на модернизацию.

Alireza Noorali 10.09.2018 09:59

@AlirezaNoorali Извините, сэр, AFAIK, модернизация не поможет в этом случае.

IntelliJ Amiya 10.09.2018 10:08

Это пока не решает. Как вы сказали, Retrofit не поможет в этом случае, поэтому я решил сказать разработчикам веб-сервисов, чтобы они изменили ответ веб-сервиса.

Alireza Noorali 11.09.2018 08:05

@AlirezaNoorali Решено сейчас?

IntelliJ Amiya 12.09.2018 12:43

Да, это решило. мы изменили ответ. Спасибо

Alireza Noorali 12.09.2018 14:58

@AlirezaNoorali Двигайтесь вперед.

IntelliJ Amiya 12.09.2018 15:03

Вот ваш Json:

{
    "id":13,
    "name":"Alireza",
    "required_id":"14",
    "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }
}

Попробуйте сделать так:

 try {

     JSONObject jsonObject; // it should be your above JsonObject 

            Iterator<?> keys = jsonObject.keys();

            while (keys.hasNext()) {
                String key = (String) keys.next();
                System.out.println("Mykey: " + key + " value: " + jsonObject.getString(key));    
            }


    } catch (JSONException e) {
        e.printStackTrace();
    }

Другие вопросы по теме