Android 使用改型将JsonArray作为根解析Json
这是我的Json。问题是它有一个数组作为节点。我对改装不是很熟练,所以我在试图理解发生了什么以及如何修复它时遇到了一些问题Android 使用改型将JsonArray作为根解析Json,android,json,gson,retrofit,Android,Json,Gson,Retrofit,这是我的Json。问题是它有一个数组作为节点。我对改装不是很熟练,所以我在试图理解发生了什么以及如何修复它时遇到了一些问题 [ { "first_name":"Jakub", "nickname":"", "last_name":"Machalek", "description":"description1", "speaker_id":0, "image_path":"" }, { "first_name":"Krzysztof"
[
{
"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...
我应该如何解析它?我目前的尝试是这样的
波乔
接口
@GET("...")
Call<List<Speaker>> getSpeakerList();
@GET(“…”)
调用getSpeakerList();
我需要任何帮助。据我所知,除了您的
扬声器
型号中遗漏了一些东西外,其他一切看起来都不错。因此,在设置改装实例时,您正在使用gson
转换器。默认情况下,gson
通过查看json中的键并尝试使用相同的名称设置java对象的属性来序列化和反序列化json
在您的例子中,它尝试在扬声器
模型中查找属性first_name
,您没有该属性,因为它是mFirstName
。因此,如果没有任何进一步的帮助,gson
实际上无法知道在模型中设置哪个字段
解决这个问题的一个明显方法是将字段命名为first\u name
。但是,这不是Java中最常见或最理想的字段命名方式,因此gson
为您提供了SerializedName
注释。它基本上告诉您Java对象中的字段与json中的哪个字段相关。因此,如果您将您的扬声器型号写为:
public class Speaker implements ParentListItem{
@SerializedName("first_name")
private String mFirstName;
@SerializedName("nickname")
private String mNickname;
@SerializedName("last_name")
private String mLastName;
// ...
}
然后gson
知道设置和使用哪些字段来反序列化json。改装电话看起来不错。我想你可以忽略SpeakerList
模型,使用列表
你也可以考虑使用。严格来说这不是必须的,但可能需要。从文档中:
除非使用GsonBuilder构建Gson并调用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法,否则此注释无效
非常感谢。我是一个专业的用户,所以我花了一段时间才接受这个答案,但我记得这正是问题所在。谢谢你的回答男人:)我已经接受了下面的答案。抱歉耽搁了。我是个临时用户。现在我开始在工作中更频繁地使用。
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();
public class Speaker implements ParentListItem{
@SerializedName("first_name")
private String mFirstName;
@SerializedName("nickname")
private String mNickname;
@SerializedName("last_name")
private String mLastName;
// ...
}