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

使用GSON解析天气应用JSON遇语法异常问题求助

解决GSON解析时的JsonSyntaxException: Expected BEGIN_OBJECT but was BEGIN_ARRAY错误

嘿,这个问题我之前踩过坑,一眼就能揪出问题根源!

错误原因分析

你的错误信息 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 224 path $.list[0].weather 已经把问题说得明明白白:
在JSON的$.list[0].weather这个位置,GSON原本期望解析成单个对象(BEGIN_OBJECT),但实际拿到的是一个数组(BEGIN_ARRAY)。

结合你给出的JSON示例,list数组里的每个元素的weather字段肯定是类似这样的结构:

"weather": [{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}]

而你的实体类里,大概率把weather字段定义成了单个Weather对象,和JSON的数组结构不匹配。

解决方案

只需要修改你的实体类,把weather字段的类型从单个对象改成集合或数组即可:

1. 使用List集合(推荐)

修改对应的实体类(比如存储list元素的ForecastItem类):

public class ForecastItem {
    private long dt;
    // 其他字段(比如temp、pressure等)
    private List<Weather> weather; // 这里改成List<Weather>,而非单个Weather对象

    // 对应的getter和setter方法
}

// Weather实体类保持不变
public class Weather {
    private int id;
    private String main;
    private String description;
    private String icon;

    // getter和setter
}

2. 使用数组类型

如果你更习惯用数组,也可以改成数组形式:

public class ForecastItem {
    private long dt;
    // 其他字段
    private Weather[] weather; // 数组类型

    // getter和setter
}

小提示

以后碰到这类GSON解析错误,先定位错误信息里的path位置,去核对JSON结构和实体类的字段类型是否匹配。可以把JSON复制到IDE的格式化工具里,更清晰地分辨每个字段是对象还是数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:48