Jackson + Gson + Retrofit 预计 BEGIN_OBJECT 但 BEGIN_ARRAY

Jackson + Gson + Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY

我知道这个问题被问了很多,但是 none 我发现的问题解决了我的特定问题。

这是我的 JSON

[JSON URL][1]

[
  {      
    "unit":"IMECA",
    "value":29,
  },
  {
    "unit":"IMECA",
    "value":43,
  }
]

这是我的 DTO

Zona.java

  public class Zona {
  private String unit;
  private int value;

  public String getUnit() {
    return unit;
  }

  public void setUnit(String unit) {
    this.unit = unit;
  }

  public int getValue() {
    return value;
  }

  public void setValue(int value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return String.valueOf(unit) + ": " + String.valueOf(value);
  }
}

这是我的界面

Api.java

public interface Api {
  @GET("/data/heatmap_stations.json")
  Call<Zona> getZona();
}

我有点理解为什么会发生,因为响应是JSON数组,但Jackson + Gson正在期待单个 JSON 对象。

我试过像这样创建一个 POJO:

Zonas.java

Public class Zonas extends ArrayList<Zona> {}

并更改Interface和Retrofit调用中的Call签名,将单个DTO替换为复数,(从Call到Call,将单个class替换为who继承了 ArrayList<>),但它什么都不做,我的意思是,它没有抛出异常,但也没有抛出响应。

改变

public interface Api {
  @GET("/data/heatmap_stations.json")
  Call<Zona> getZona();
}

public interface Api {
  @GET("/data/heatmap_stations.json")
  Call<List<Zona>> getZona();
}

你告诉它期待一个 Zona 对象,但它返回一个 Zona 对象数组