- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 Json。它的问题是它有一个数组作为节点。我对 Retrofit 不太熟悉,因此在尝试了解发生了什么以及如何解决它时遇到了一些问题。
[
{
"first_name":"Jakub",
"nickname":"",
"last_name":"Machalek",
"description":"description1",
"speaker_id":0,
"image_path":""
},
{
"first_name":"Krzysztof",
"nickname":"",
"last_name":"Opasik",
"description":"Description2",
"speaker_id":1,
"image_path":""
},
...etc...
我该如何解析它?我目前的尝试是这样的
POJO
public class Speaker implements ParentListItem{
private String mFirstName;
private String mNickname;
private String mLastName;
private String mDescription;
private String mImageUrl;
private ArrayList<Speaker> mChildrenList;
public Speaker(String mFirstName, String mNickname, String mLastName, String mDescription, String mImageUrl) {
this.mFirstName = mFirstName;
this.mNickname = mNickname;
this.mLastName = mLastName;
this.mDescription = mDescription;
this.mImageUrl = mImageUrl;
mChildrenList = new ArrayList<>();
mChildrenList.add(this);
}
public String getFirstName() {
return mFirstName;
}
public void setFirstName(String mFirstName) {
this.mFirstName = mFirstName;
}
public String getNickname() {
return mNickname;
}
public void setNickname(String mNickname) {
this.mNickname = mNickname;
}
public String getLastName() {
return mLastName;
}
public void setLastName(String mLastName) {
this.mLastName = mLastName;
}
public String getDescription() {
return mDescription;
}
public void setDescription(String mDescription) {
this.mDescription = mDescription;
}
public String getImageUrl() {
return mImageUrl;
}
public void setImageUrl(String mImageUrl) {
this.mImageUrl = mImageUrl;
}
@Override
public List<?> getChildItemList() {
return mChildrenList;
}
@Override
public boolean isInitiallyExpanded() {
return false;
}
还有
public class SpeakerList {
List<Speaker> speakerList;
public List<Speaker> getSpeakerList() {
return speakerList;
}
public void add(Speaker nataCenterItem){
if(speakerList == null){
speakerList = new LinkedList<>();
}
speakerList.add(nataCenterItem);
}
改造 公共(public)类 SessionInfoService { 私有(private) SessionInfoApi sessionInfoApi;
public SessionInfoService(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("...")
.addConverterFactory(GsonConverterFactory.create())
.build();
sessionInfoApi = retrofit.create(SessionInfoApi.class);
}
public void getLectureList(Callback callback) throws IOException {
sessionInfoApi.getLectureList().enqueue(callback);
}
public void getSpeakerList(Callback callback) throws IOException {
sessionInfoApi.getSpeakerList().enqueue(callback);
}
界面
@GET("...")
Call<List<Speaker>> getSpeakerList();
我需要任何帮助。
最佳答案
据我所知,一切看起来都不错,除了你在 Speaker
中遗漏了一些东西。模型。因此,当您设置改造实例时,您将使用 gson
转换器。默认gson
通过查看 json 中的键并尝试设置具有相同名称的 java 对象的属性来序列化和反序列化 json。
在您的情况下,它会尝试查找例如属性 first_name
在你的Speaker
模型,您没有该模型,因为它是 mFirstName
。因此,无需任何进一步的帮助,gson
实际上无法知道要在模型中设置哪个字段。
解决此问题的一个明显方法是将您的字段命名为 first_name
。但是,这不是 Java 中命名字段的最常见或最理想的方式,因此 gson
为您提供SerializedName
注解。它基本上告诉了Java对象中的字段与json中的哪个字段相关。所以如果你写你的 Speaker
模型为:
public class Speaker implements ParentListItem{
@SerializedName("first_name")
private String mFirstName;
@SerializedName("nickname")
private String mNickname;
@SerializedName("last_name")
private String mLastName;
// ...
}
然后gson
知道要设置哪些字段并使用哪些字段来反序列化和序列化 json。 Retrofit 调用看起来不错。我想你可以忽略 SpeakerList
模型并使用List<Speaker>
就像你一样。
您也可以考虑使用 Expose Annotation 。这并不是绝对必要的,但可能是需要的。来自文档:
This annotation has no effect unless you build Gson with a GsonBuilder and invoke GsonBuilder.excludeFieldsWithoutExposeAnnotation() method.
关于android - 使用 Retrofit 解析以 JsonArray 作为根的 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36260387/
我正在使用网络服务请求直方图数据。数据是数组中的一组数组: [[1375056000000,23.284713745117],[1375142400000,3.809531211853], [1375
这是我的 json 文件的相关部分: "categories": [ [ "Belgian Restaurant", "belgian" ],
我目前很困惑,为什么我不能在我的 Android 应用程序中从 JSONArray 中提取 JSONArray。下面给出了一个示例和我的源代码片段。 //The JSON { "cur
我正在尝试解析 JSONObject。 这个 JSONObject 中有一个 JSONArray,它在 JSONArray 中还有另一个 JSONArray。 我试图解析的 json 形式如下。 {
我正在尝试解析对象数据列表中的 JSON 数组 payment_details。 在这里,我已经成功解析了回收站 View 中调用的数据数组,但我无法调用 payment_details 数组。 适配
我正在寻找一个选项,可以将多个值添加到 JSONArray 并将其添加到另一个 JSONArray 中,而无需创建多个变量。例如: JSONArray array1 = new JSONArr
我遇到过一种情况,org.json.JSONArray 对象非常大,这最终会导致延迟和其他问题。因此,我们决定将 JSONArray 分割成更小的 block 。例如,如果 JSONArray 是这样
您好,我正在尝试在另一个 json 数组中解析一个 json 数组。帮我解决这个问题。 我的 Json 数组是 "results":[ { "percentcompleted"
我正在使用 Gson用于解析 json 响应。我需要在 JsonArray 中解析 JSONArry.. 我的回答是.. { "message": "Retreive sucessfully", "f
@GET @Produces("application/json") public Response GetAll() throws JSONException{ tblCategoryDao
我从服务器获取以下 json: { "Data": [ { "Record": [ " d11", "d12"
我正在使用 ajax 将 json 对象从 javascript 传递到 java servlet。 var jsonObj = JSON.stringify(objArray); //Then I
我需要获取作为“结果”内部数组的“示例”数据 JSON FILE 并将其附加到字符串。最简单的方法是什么? 这就是我得到“定义”的方式 private JSONObject queryResults;
我需要从 JSONArray 获取 JSONArray: JSONParser parser = new JSONParser(); JSONObject jObject=(J
我有一个 jsonArray 响应。我需要阅读此响应,其中包含 3 个 jsonArray。 这是 json 响应。这是一个 GET 请求并通过 Volley 请求发送。 [ "0x9000",
在此 Json 响应中,如何使用 Java 访问“smallImageUrls”并获取图像 url? 似乎“smallImageUrls”是“匹配”jsonarray 中的一个数组。如果我错了,请有人
这个问题在这里已经有了答案: Convert string to JSON array (10 个答案) 关闭 5 年前。 如何正确地将此字符串转换为 jsonArray? { "myArr
是否可以从较新的 EJB JSON 库转换为较旧的 org.json 库,而无需依赖 org.json.simple 或 GSON? 在下面的例子中,“buttons”是一个填充的 JsonArr
如何从jsonarray获取jsonarray? 我试过的代码。 for(loop) List stringList = new ArrayLis
我目前是 Json 新手,遇到了一个问题。我搜索了很多但找不到答案! 我从 json url 获取名称列表。名称可以在此 json 文件中重复,但我只想将它们的一条记录保留到我称为“arr”的新数组中
我是一名优秀的程序员,十分优秀!