改造预期 BEGIN_OBJECT 但在第 1 行第 2 列路径 BEGIN_ARRAY

Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path

我正在尝试 Retrofit 以获得此响应

POST : https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com/prod/pacakageinfo
BODY : {"type":"carwash"}

回应

[
  {
    "title": "SEDAN/NON SEDAN Exterior",
    "choice": "Exterior Only",
    "price": ".95/34.95 +",
    "description": [
      "Full body waterless car wash",
      "Windows & Mirrors cleaning",

    ],
    "addons": [
      {
        "price": "29.95",
        "title": "Sedan 29.95$ USD"
      },
      {
        "price": "34.95",
        "title": "Non-Sedan SUV 34.95$ USD"
      }
    ]
  },
  {
    "title": "SEDAN/NON SEDAN",
    "choice": "Exterior & Interior",
    "price": ".95/44.95 +",
    "description": [
      "Full body waterless car wash",
      "Leather cleaning & Care"
    ],
    "addons": [
      {
        "price": "34.95",
        "title": "Sedan 34.95$ USD"
      },
      {
        "price": "44.95",
        "title": "Non-Sedan/SUV 44.95$ USD"
      }
    ]
  }
]

PackagesAPI Class

public interface PackagesAPI {
    @POST("/prod/pacakageinfo")
    Call<List<PackagesAdapter.Item>> loadPackages(@Body PackagesFragment.PackageType packageType);
}

GetPackagecall(在包片段中)

private void getPackagesCall(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        PackagesAPI packagesAPI = retrofit.create(PackagesAPI.class);
        Call<List<PackagesAdapter.Item>> call = packagesAPI.loadPackages(new PackageType("carwash"));
        call.enqueue(this);
    }
public class PackageType {
    final String type;

    PackageType(String type) {
        this.type = type;
    }
}

Public 对象 在 class PackageAdapter

public class Item {
    String title;
    String choice;
    String price;
    public List<String> description = new ArrayList<String>();
    public List<Addon> addons = new ArrayList<Addon>();
}
public class Addon {
    String price;
    String title;
}

但是它给出了 "Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path" 异常?

我看到了类似的其他帖子,通常对象定义存在问题?

我无法弄清楚这里出了什么问题,我试过了 jsonschema2pojo

您应该尝试将 ItemAddon class 设为 static 或将它们移动到它们自己的 class 定义中(出于 PackageAdapter).因此,在此解决方案中,我假设您将这些 classes 移动到它们单独的 class files/definitions 如果没有令人信服的理由将它们作为内部 classes。

Item.java:

public class Item {
    String title;
    String choice;
    String price;
    public List<String> description = new ArrayList<String>();
    public List<Addon> addons = new ArrayList<Addon>();
}

Addon.java

public class Addon {
    String price;
    String title;
}

不要将成员变量设为 public,请尝试将这些内部 class 设为 static,或者将它们移至单独的 class文件(推荐)。测试一下,让我们知道它是否解决了问题。