You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仿Uber应用运行报错:Expected BEGIN_ARRAY but was STRING 求助

解决「Expected BEGIN_ARRAY but was STRING」JSON解析错误

这个错误是JSON解析库(大概率是Gson或Moshi这类工具)抛出的核心问题:你写的解析逻辑期望拿到一个数组类型的JSON,但实际从接口拿到的是字符串类型的响应。结合你说之前运行正常、重启项目后出问题的情况,我给你梳理几个排查和解决方向:

1. 先确认接口返回的真实内容

这是最关键的第一步!重启项目后可能请求参数变了、后端接口临时调整,导致返回的不再是你预期的数组格式。你可以在网络请求回调里,把原始的响应字符串打印出来:

// 举个OkHttp回调的示例
@Override
public void onResponse(Call call, Response response) throws IOException {
    String rawResponse = response.body().string();
    Log.d("DebugResponse", "原始响应内容:" + rawResponse); // 打印出来看真实数据
    // 后续解析代码...
}

比如之前正常的响应可能是这样的数组:

[{"customerUID":"123","lat":39.90,"lng":116.40},{"customerUID":"456","lat":31.23,"lng":121.47}]
但现在可能返回的是错误字符串(比如"无可用客户位置")、单个对象,甚至是空字符串,这都会触发这个错误。

2. 检查解析逻辑与JSON结构的匹配

你提到用Map数组存customerUID、List数组存经纬度,要确保解析逻辑和实际返回的JSON结构完全对应:

  • 如果你用List<LatLng>解析经纬度,但实际返回的是单个坐标的字符串(比如"39.90,116.40"),就会报错;
  • 如果Map对应的是客户UID的对象,但实际返回的是单个UID字符串(比如"123"),也会触发错误。

举个Gson解析的反例和正例:

// 错误:期望解析成List数组,但实际是字符串
List<CustomerData> dataList = new Gson().fromJson(rawResponse, new TypeToken<List<CustomerData>>(){}.getType());

// 如果实际返回的是单个Customer对象,要改成:
CustomerData data = new Gson().fromJson(rawResponse, CustomerData.class);

// 如果实际返回的是错误字符串,要先判断:
if (!rawResponse.startsWith("[")) {
    // 处理错误情况,比如提示无数据
    return;
}

3. 排查项目重启后的代码变更

虽然你说没法撤销修改,但可以回忆或检查这几个点:

  • 有没有修改网络请求的URL、请求方法或参数?比如之前是GET请求,改成POST后参数不对导致返回格式变化;
  • 有没有修改实体类(比如CustomerLocation这类用于解析的Bean)的结构?比如把数组字段改成了字符串字段;
  • 有没有切换过测试环境/生产环境?不同环境的接口返回格式可能不一致。

4. 临时验证方法

如果暂时找不到问题,可以把之前正常运行时的JSON响应内容硬编码到代码里,看看解析逻辑是否能正常工作:

// 硬编码之前正常的JSON数组
String testResponse = "[{\"customerUID\":\"123\",\"lat\":39.90,\"lng\":116.40}]";
List<CustomerData> testList = new Gson().fromJson(testResponse, new TypeToken<List<CustomerData>>(){}.getType());

如果这段代码能运行,说明问题出在接口返回;如果还是报错,那就是你的解析逻辑或实体类有问题,需要重新核对。

内容的提问来源于stack exchange,提问作者user9634535

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:49:56