GSON解析REST API响应报错:预期BEGIN_ARRAY却为BEGIN_OBJECT
Gson反序列化错误:Expected BEGIN_ARRAY but was BEGIN_OBJECT 问题分析
这个错误其实很好理解——你给Gson传递的反序列化类型和实际返回的JSON结构完全不匹配!
问题根源拆解
- 你实际拿到的JSON根节点是一个对象(开头是
{),它包含meta和objects两个属性,其中objects才是你要的数组。 - 但你的代码里用了
TypeToken<List<InstanceCreatorForAwsMarketplace>>,这相当于告诉Gson:“整个响应体是一个数组/List”,所以Gson一看到JSON开头的{就直接报错了——它本来等着[呢!
正确的解决方式
你已经通过jsonschema2pojo生成了对应整个JSON结构的AwsMarketplace类,这才是你应该用来反序列化根节点的类型,而不是直接用List。修正后的代码应该是这样:
Type localVarReturnType = new TypeToken<AwsMarketplace>(){}.getType(); ApiResponse<AwsMarketplace> responseFromApiClient = apiClient.execute(newCall, localVarReturnType); // 之后要拿列表的话,直接从根对象里取 List<YourItemType> items = responseFromApiClient.getBody().getObjects();
这里的YourItemType就是你生成的Object类(建议给它改个更清晰的名字,比如AwsMarketplaceSubscription之类的,避免和Java自带的Object类混淆)。
额外提醒
检查下你生成的AwsMarketplace类,它应该包含:
- 一个
Meta类型的meta字段 - 一个
List<YourItemType>类型的objects字段
这样Gson就能完美匹配整个JSON的层级结构,不会再出现类型不匹配的错误了。
内容的提问来源于stack exchange,提问作者JonB
相关产品推荐
相关产品推荐

