Android 改型2解析json,从数组开始

Android 改型2解析json,从数组开始,android,retrofit2,gson,Android,Retrofit2,Gson,希望你做得很好 我发现了一个很奇怪的问题。我通过改装2获得响应,并希望通过gson对其进行pars。整个反应是这样的, [ {"id":1,"name":"x","family":"y"},{"id":2,"name":"a","family":"b"},... ] 我已经测试了很多方法,但问题是每当我想得到身体的反应时。列表的大小为零或空 你能告诉我解析这种json的最佳方法吗 如果你要密码,我带你去 提前感谢这是一组对象。假设您的对象是X类型,并且您的JSON字符串响应在变量Y中,那么您应

希望你做得很好

我发现了一个很奇怪的问题。我通过改装2获得响应,并希望通过gson对其进行pars。整个反应是这样的,

[ {"id":1,"name":"x","family":"y"},{"id":2,"name":"a","family":"b"},... ]
我已经测试了很多方法,但问题是每当我想得到身体的反应时。列表的大小为零或空

你能告诉我解析这种json的最佳方法吗

如果你要密码,我带你去


提前感谢

这是一组对象。假设您的对象是
X
类型,并且您的
JSON
字符串响应在变量Y中,那么您应该按照以下方式对其进行解析

List<X> list =  (List<X>)new Gson().fromJSON(Y)
List List=(List)new Gson().fromJSON(Y)
你的改装服务电话应该是这样的

@GET("/apiurl")
Call<List<X>> getListOfX(...)
@GET(“/apirl”)
调用getListOfX(…)

当您使用
改装
库到web服务调用时,您将不得不使用POGO类解析Json,如

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class YourPareseClass{

@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("family")
@Expose
private String family;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getFamily() {
return family;
}

public void setFamily(String family) {
this.family = family;
}

}
正如您所知,响应位于JsonArray中,您需要按如下方式处理响应:-

Type collectionType = new TypeToken<Collection<YourPareseClass>>(){}.getType();
Collection<YourPareseClass> YOUR_RESONSE_ARRAY = gson.fromJson("YOUR_JSON_RESONSE", collectionType);  ///YOUR_RESONSE_ARRAY  contains all yours response in the Array
Type collectionType=new-TypeToken(){}.getType();
Collection YOUR_RESONSE_ARRAY=gson.fromJson(“YOUR_JSON_RESONSE”,collectionType)///您的\u响应\u数组包含您在数组中的所有响应
使用@Headers,传递“Accept:application/json”:

@GET(“/list”)
@标题({“Accept:application/json”})
调用getList()

@MediJahed…请尝试下面我的解决方案,如果出现问题,请告诉我…我仍然不知道为什么改装和gson builder不能阻止这该死的响应,但您的解决方案很有魅力!谢谢man@MehdiJahedManesh…很乐意帮助兄弟:)@MehdiJahedManesh…事实上,我们必须指定响应在数组中,而不是必须使用TypeToken…否则默认情况下,它认为来自JsonObject中服务器的响应,但我们的响应是数组而不是冲突发生的..并且在最后得到null..这对我有帮助。
@GET("/list")
@Headers({"Accept: application/json"})
Call<List<User>> getList()