【问题标题】:How do I retrieve json objects nested in a json array from a retrofit response through my pojo class如何通过我的 pojo 类从改造响应中检索嵌套在 json 数组中的 json 对象
【发布时间】:2019-10-11 18:13:38
【问题描述】:

我正在使用登录 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:应为 BEGIN_ARRAY 但为 STRING 在第 1 行第 145 列路径 $.success.user.user_agents

【问题讨论】:

    标签: android arrays json retrofit


    【解决方案1】:

    因为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 数组的名称。删除“”应该会出错。请帮忙解释更多。谢谢
    • 请在此处检查您的 JSON jsoneditoronline.org 您会收到错误消息
    【解决方案2】:

    您的响应处理不正确,根据错误,Web 服务响应是字符串类型,但您设置的模型类是数组类型,

    或分享网络服务响应以获得更好的解决方案。

    从响应中删除“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" } ]
    

    【讨论】:

      【解决方案3】:

      *这将工作*

          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);
                  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-17
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 2020-07-08
        • 1970-01-01
        • 2017-08-01
        相关资源
        最近更新 更多