我从PHP服务器收到JSON
响应。在android中,我需要编写一个java模型(POJO)来用于解析Retrofit(一个用于http请求的Android库)中的响应。
JSON结构:
{
"calendar": {
"2016-06-10": [
{
"time": "10h00m",
"title": "PROVA P2",
"description": "LP / RED / ED.FIS - 80 E 90",
"color": "#990000"
}
],
"2016-06-11": [
{
"time": "10h00m",
"title": "SIMULADO",
"description": "LOREM PSIUM DOLOR LOREM",
"color": "#009900"
},
{
"time": "11h00m",
"title": "CONSELHO DE CLASSE",
"description": "LOREM PSIUM DOLOR",
"color": "#009900"
}
]
},
"error": false
}
此JSON
来自PHP Server。
如何使用 Retrofit 处理它?
答案 0 :(得分:2)
要使用动态密钥解析JSON
,您的Map
课程中需要POJO
。
将以下POJO
类添加到项目中:
CalendarResponse.java
public class CalendarResponse {
@SerializedName("calendar")
Map<String, List<Entry>> entries;
@SerializedName("error")
private boolean error;
}
Entry.java
public class Entry {
@SerializedName("time")
private String time;
@SerializedName("title")
private String title;
@SerializedName("description")
private String description;
@SerializedName("color")
private String color;
}
在终端的改装界面中使用CalendarResponse
类,请参阅下面的示例
public interface CalendarService {
@GET("<insert your own relative url>")
Call<CalendarResponse> listCalendar();
}
执行呼叫(同步),如下所示:
Call<CalendarResponse> call = calendarService.listCalendar();
CalendarResponse result = call.execute().body();
如果需要,以下是使用JSON
解析GSON
的示例:
Gson gson = new GsonBuilder().create();
CalendarResponse b = gson.fromJson(json, CalendarResponse.class);
答案 1 :(得分:0)
通常情况下,您会创建一个POJO,它代表您的JSON,但在这种情况下,您需要2016-06-10课程和2016-06-11课程。
这不是解决方案。因此,更改JSON响应以使日期成为单独的值:
{
"calendar": [
{
"date": "2016-06-10",
"entries": [
{
"time": "10h00m",
"title": "PROVA P2",
"description": "LP / RED / ED.FIS - 80 E 90",
"color": "#990000"
}
]
}
]
}
更好的是,只需创建一个dateTime值并使其成为正确的ISO 8601时间戳:
{
"calendar": [
{
"time": "2016-06-10T08:00:00.000Z",
"title": "PROVA P2",
"description": "LP / RED / ED.FIS - 80 E 90",
"color": "#990000"
}
]
}
如果您无法控制服务于JSON的服务器,那么您应该使用Retrofit来获取String并通过gson自己进行Gson转换。
答案 2 :(得分:0)
当我不想为服务器的奇怪响应创建/\[\[([^\]]*(?:](?!])[^\]]*)*)]]/g
时,我所做的是将其保存为java中的POJO
并解析字符串以创建JSON对象。 (是的,因为有时我们无法控制API人员正在编码的内容......)
正如 Cristan 所说,创建一个JSON
类会很奇怪。因此,最好直接将其作为特定情况的2016-06-10
对象进行处理。您可以使用JSON容器访问任何属性,甚至可以将其存储在数据库中。
如果您选择该路径,则需要执行以下操作:
JSON