如何解析来自服务器的这种格式的 JSON 响应
How to parse the JSON response coming from server which is in this format
我收到来自服务器的 JSON 响应,如下所示:
[
{
"user_id": 147,
"ticket_ref_no": "6ef8b3be-b3b7-4ffb-b8ca-6f114d972553",
"status": "open",
"created_at": "2019-08-20 17:08:29",
"updated_at": "2019-08-20 17:08:29",
"latestMessage": [
{
"message": "Created New Ticket for test",
"ticket_id": 2,
"user_id": 147,
"response_by_user_id": null,
"created_at": "2019-08-20 17:08:29",
"updated_at": "2019-08-20 17:08:29"
}
]
},
{
"user_id": 147,
"ticket_ref_no": "d1c022f2-c12b-45ed-8d74-befc4896c5e2",
"status": "open",
"created_at": "2019-08-20 17:22:14",
"updated_at": "2019-08-20 17:22:14",
"latestMessage": [
{
"message": "Help Test",
"ticket_id": 3,
"user_id": 147,
"response_by_user_id": null,
"created_at": "2019-08-20 17:22:14",
"updated_at": "2019-08-20 17:22:14"
}
]
}
]
我想知道如何解析这些数据,如何将这些数据发送到我的适配器,我试过使用:
for (int i = 0; i<data.size(); i++)
dataMessage = new ArrayList<>(Arrays.asList(data.get(i).getLatestMessage()));
但它只传递最后一条消息我的意思是 dataMessage 被最新消息覆盖但我想要 dataMessage 中的所有消息。
任何人都可以解决吗? TIA
但它只传递最后一条消息我的意思是 dataMessage 被最新消息覆盖但我想要 dataMessage 中的所有消息。任何人都可以解决吗? TIA
for (int i = 0; i<data.size(); i++)
dataMessage = new ArrayList<>(Arrays.asList(data.get(i).getLatestMessage()));
问题:
=> 因为您正在迭代循环并将值存储在 dataMessage
变量中,所以显然在循环迭代结束时 dataMessage
将具有最后一条消息值。
解法:
无需在循环内初始化 dataMessage,您只需继续添加在每次迭代中找到的最新消息:
for (int i = 0; i<data.size(); i++)
dataMessage.add(data.get(i).getLatestMessage());
创建一个模型 class,设置从 json 获取的所有值并将该模型 class 对象添加到数组列表并将该数组列表发送到适配器
创建一个代表您的 Json 结构的 POJO。使用 serialization/deserialization 库(例如 GSON)从 json 加载中获取对象。
对于您的回复,类似于此的 POJO 模式会有所帮助。
package com.example;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Example {
@SerializedName("user_id")
@Expose
private Integer userId;
@SerializedName("ticket_ref_no")
@Expose
private String ticketRefNo;
@SerializedName("status")
@Expose
private String status;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
@SerializedName("latestMessage")
@Expose
private List<LatestMessage> latestMessage = null;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getTicketRefNo() {
return ticketRefNo;
}
public void setTicketRefNo(String ticketRefNo) {
this.ticketRefNo = ticketRefNo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
public List<LatestMessage> getLatestMessage() {
return latestMessage;
}
public void setLatestMessage(List<LatestMessage> latestMessage) {
this.latestMessage = latestMessage;
}
}
-----------------------------------com.example.LatestMessage.java-----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LatestMessage {
@SerializedName("message")
@Expose
private String message;
@SerializedName("ticket_id")
@Expose
private Integer ticketId;
@SerializedName("user_id")
@Expose
private Integer userId;
@SerializedName("response_by_user_id")
@Expose
private Object responseByUserId;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getTicketId() {
return ticketId;
}
public void setTicketId(Integer ticketId) {
this.ticketId = ticketId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Object getResponseByUserId() {
return responseByUserId;
}
public void setResponseByUserId(Object responseByUserId) {
this.responseByUserId = responseByUserId;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
}
只需将 =
更改为 add
,如下所示:
for (int i = 0; i<data.size(); i++)
dataMessage.add(Arrays.asList(data.get(i).getLatestMessage());
您也可以使用
Collections.addAll(dataMessage, data.get(i).getLatestMessage());
我收到来自服务器的 JSON 响应,如下所示:
[
{
"user_id": 147,
"ticket_ref_no": "6ef8b3be-b3b7-4ffb-b8ca-6f114d972553",
"status": "open",
"created_at": "2019-08-20 17:08:29",
"updated_at": "2019-08-20 17:08:29",
"latestMessage": [
{
"message": "Created New Ticket for test",
"ticket_id": 2,
"user_id": 147,
"response_by_user_id": null,
"created_at": "2019-08-20 17:08:29",
"updated_at": "2019-08-20 17:08:29"
}
]
},
{
"user_id": 147,
"ticket_ref_no": "d1c022f2-c12b-45ed-8d74-befc4896c5e2",
"status": "open",
"created_at": "2019-08-20 17:22:14",
"updated_at": "2019-08-20 17:22:14",
"latestMessage": [
{
"message": "Help Test",
"ticket_id": 3,
"user_id": 147,
"response_by_user_id": null,
"created_at": "2019-08-20 17:22:14",
"updated_at": "2019-08-20 17:22:14"
}
]
}
]
我想知道如何解析这些数据,如何将这些数据发送到我的适配器,我试过使用:
for (int i = 0; i<data.size(); i++)
dataMessage = new ArrayList<>(Arrays.asList(data.get(i).getLatestMessage()));
但它只传递最后一条消息我的意思是 dataMessage 被最新消息覆盖但我想要 dataMessage 中的所有消息。 任何人都可以解决吗? TIA
但它只传递最后一条消息我的意思是 dataMessage 被最新消息覆盖但我想要 dataMessage 中的所有消息。任何人都可以解决吗? TIA
for (int i = 0; i<data.size(); i++)
dataMessage = new ArrayList<>(Arrays.asList(data.get(i).getLatestMessage()));
问题:
=> 因为您正在迭代循环并将值存储在 dataMessage
变量中,所以显然在循环迭代结束时 dataMessage
将具有最后一条消息值。
解法:
无需在循环内初始化 dataMessage,您只需继续添加在每次迭代中找到的最新消息:
for (int i = 0; i<data.size(); i++)
dataMessage.add(data.get(i).getLatestMessage());
创建一个模型 class,设置从 json 获取的所有值并将该模型 class 对象添加到数组列表并将该数组列表发送到适配器
创建一个代表您的 Json 结构的 POJO。使用 serialization/deserialization 库(例如 GSON)从 json 加载中获取对象。
对于您的回复,类似于此的 POJO 模式会有所帮助。
package com.example;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Example {
@SerializedName("user_id")
@Expose
private Integer userId;
@SerializedName("ticket_ref_no")
@Expose
private String ticketRefNo;
@SerializedName("status")
@Expose
private String status;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
@SerializedName("latestMessage")
@Expose
private List<LatestMessage> latestMessage = null;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getTicketRefNo() {
return ticketRefNo;
}
public void setTicketRefNo(String ticketRefNo) {
this.ticketRefNo = ticketRefNo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
public List<LatestMessage> getLatestMessage() {
return latestMessage;
}
public void setLatestMessage(List<LatestMessage> latestMessage) {
this.latestMessage = latestMessage;
}
}
-----------------------------------com.example.LatestMessage.java-----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LatestMessage {
@SerializedName("message")
@Expose
private String message;
@SerializedName("ticket_id")
@Expose
private Integer ticketId;
@SerializedName("user_id")
@Expose
private Integer userId;
@SerializedName("response_by_user_id")
@Expose
private Object responseByUserId;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getTicketId() {
return ticketId;
}
public void setTicketId(Integer ticketId) {
this.ticketId = ticketId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Object getResponseByUserId() {
return responseByUserId;
}
public void setResponseByUserId(Object responseByUserId) {
this.responseByUserId = responseByUserId;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
}
只需将 =
更改为 add
,如下所示:
for (int i = 0; i<data.size(); i++)
dataMessage.add(Arrays.asList(data.get(i).getLatestMessage());
您也可以使用
Collections.addAll(dataMessage, data.get(i).getLatestMessage());