Как получить объекты json, вложенные в массив json, из ответа на модификацию через мой класс pojo

Я работаю с API-интерфейсом для входа в систему и отправляет сложный ответ при успешном входе в систему. У меня проблемы с реализацией полученного массива в классе POJO, созданном для ответа. Массив содержит два вложенных объекта.

Я пытался использовать arraylist, чтобы получить его, но я получаю сообщение об ошибке

public class User{
   String id;
   String name;
   String email;
   String email_verified_at;
   @SerializedName("user_agents")
   private ArrayList<UserAgents> userAgents ;



    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail_verified_at() {
        return email_verified_at;
    }

    public void setEmail_verified_at(String email_verified_at) {
        this.email_verified_at = email_verified_at;
    }

UserAgents.java

  public class UserAgents{

  public UserAgents(){
      device = "";
      token_id = "";
    }

    @SerializedName("device")
    String device;

    @SerializedName("token_id")
    String token_id;

    public String getDevice() {
        return device;
    }

    public void setDevice(String device) {
        this.device = device;
    }

    public String getToken_id() {
        return token_id;
    }

    public void setToken_id(String token_id) {
        this.token_id = token_id;
    }
}

Ожидаемый формат JSON:

    "user_agents": "
                    [
                        {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; 
                          rv:42.0) Gecko/20100101 Firefox/42.0",      
"token_id":"ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c"
                        },
                        {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
                            "token_id":"8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404"
                        }
                    ]"

Это ошибка, которую я получаю:

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 145 path $.success.user.user_agents

0
0
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

ваша обработка ответов неверна, в соответствии с ошибкой ответ веб-службы является типом строки, но вы устанавливаете класс модели, который является типом массива,

или поделитесь ответом веб-службы для лучшего решения.

удаление ключевого слова «user_agents» из ответа.

ваш ответ веб-службы должен быть таким,

[ {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id":"ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c" }, {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0", "token_id":"8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404" } ]
Ответ принят как подходящий

Из-за того, что user_agents содержит ""

Итак, вот ваша user_agents строка

Вам нужно удалить "" из "user_agents": [ ]

{
  "user_agents": [
    {
      "device": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
      "token_id": "ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c"
    },
    {
      "device": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
      "token_id": "8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404"
    }
  ]
}

Я не понимаю. Предполагается, что «user_agents» является именем массива json в соответствии с обычным соглашением об именах JSON. удаление "" должно дать ошибку. Пожалуйста, помогите с дополнительным объяснением. Спасибо

Onatemowo Damilare 25.05.2019 14:14

Пожалуйста, проверьте свой JSON здесь jsoneditoronline.org здесь вы получаете сообщение об ошибке

Vishal Sojitra 25.05.2019 14:15

* ЭТО БУДЕТ РАБОТАТЬ *

    JSONObject JO = new JSONObject(jsonresponse);
    JSONArray JA = (JSONArray) JO.getString("user_agents");
    for (int i = 0; i < JA.length(); i++)
            {
                JSONObject jo = (JSONObject)JA.get(i);
                UserAgents UA = new UserAgents();
                UA.device = jo.getString("device");
                UA.token_id =jo.getString("token_id");
                userAgents.add(UA);
            }

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