使用 Gson 获取响应

Get Response With Gson

我正在尝试通过改造 + rxjava + gson

接收响应

我们的后端是用 laravel 开发的。

问题是 gson 无法将 json 转换为我的 java class

这里是我的 classes 和回复的示例

响应样本:

{
"data": {
    "id": 3,
    "name": "name",
    "last_name": "last name",
    "phone_number": "091212345678",
    "avatar": null
}

}

和 java class :

public class User {
private Long id;
private String name;
private String last_name;
private String phone_number;
private String role;
@SerializedName("avatar")
private String profilePicture;


public Long getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

public String getLastName() {
    return last_name;
}

public void setLastName(String last_name) {
    this.last_name = last_name;
}

public String getPhone_number() {
    return phone_number;
}

public void setPhone_number(String phone_number) {
    this.phone_number = phone_number;
}

public String getRole() {
    return role;
}

public void setRole(String role) {
    this.role = role;
}

public String getProfilePicture() {
    return profilePicture;
}

public void setProfilePicture(String profilePicture) {
    this.profilePicture = profilePicture;
}

我不知道 json 响应中的“数据”是什么。

以及为什么 gson 不能将 json 转换为 java。

请帮帮我

因为这个 json 响应是嵌套的你应该像下面这样设计 class 通过将用户对象包装在里面来正确解析这个响应。

public class User {

public Long id;
public String name;
public String last_name;
public String phone_number;
public String avatar;

}
-----------------------------------
public class Data {

public User user;

}

重新设计您的模型Class像这样:

public class User {

@SerializedName("data")
public Data data;

// Generate getter setter for all the field here

}

现在用你的 Json 属性:

创建另一个名为 Data 的 class
public class Data {

public Long id;
public String name;
public String last_name;
public String phone_number;
public String avatar;

// Generate getter setter for all the field here

}

现在您可以像这样访问字段:

User user = new User();
//get name
user.getData().getName();
//set name
user.getData().setName("Demo");

您有一个名为“数据”的 JSON 对象,而用户 class 不包含用于存储“数据”对象内容的数据字段。 Gson 正在 User class 中寻找一个名为“data”的字段,它可以保存“data”对象的内容,但没有找到。现在有两种方法可以解决这个问题。

  1. Return 您的 JSON 对象采用这种格式:

    {
    “编号”:3,
    "姓名": "姓名",
    "last_name": "姓氏",
    “phone_number”:“091212345678”,
    “头像”:空
    }

2.1 创建数据class并在用户中声明它class:

public class Data {  
private Long id;  
private String name;  
private String last_name;  
private String phone_number;  
private String role;  
@SerializedName("avatar")  
private String profilePicture;  
/*Getters and setters here*/ }

2.1。在用户 class

中声明数据字段
public class User {  private Data data; public Data getData() {  return data; }}