【问题标题】:Retrofit 2 parsing json , starting with arrayRetrofit 2 解析 json ,从数组开始
【发布时间】:2017-03-12 12:01:51
【问题描述】:

希望你做得很好。

我发现了一个很奇怪的问题。我通过改造 2 得到响应,并想通过 gson 解析它。整体反应是这样的,

[ {"id":1,"name":"x","family":"y"},{"id":2,"name":"a","family":"b"},... ]

我一直在测试很多方法,但问题是每当我想从 body 获得响应时。列表的大小为零或空。

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

如果你想要代码,我会给你看。

提前致谢

【问题讨论】:

  • @MediJahed...请在下面尝试我的解决方案,如果有问题请告诉我...

标签: android retrofit2 gson


【解决方案1】:

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

List<X> list =  (List<X>)new Gson().fromJSON(Y)

你的改造服务电话应该是这样的

@GET("/apiurl")
Call<List<X>> getListOfX(...)

【讨论】:

  • 这对我有帮助。
【解决方案2】:

当您使用Retrofit libray 进行 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 than 中,您需要处理响应如下:-

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

【讨论】:

  • Grate,我仍然不知道为什么改造和 gson 建造者不能分开这个该死的反应,但你的解决方案很有魅力!谢谢男人
  • @MehdiJahedManesh ..很高兴帮助兄弟:)
  • @MehdiJahedManesh ...实际上,我们必须指定响应在数组中,而不是使用 TypeToken ...否则默认情况下,它认为来自服务器的响应JsonObject 但我们的响应是数组而不是发生冲突..最后你得到空值..
【解决方案3】:

使用@Headers,传递“Accept: application/json”:

@GET("/list")
@Headers({"Accept: application/json"})
Call<List<User>> getList()

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多