使用 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”对象的内容,但没有找到。现在有两种方法可以解决这个问题。
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; }}
我正在尝试通过改造 + 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 的 classpublic 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”对象的内容,但没有找到。现在有两种方法可以解决这个问题。
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; }}