Flutter中JSON空数组与空对象混合字段如何正确赋值给显式类型变量
报错根本原因
你看到的矛盾报错是接口返回的data字段类型不统一导致的:你后续核查也提到,列表嵌套的对象中,部分对象的data取值为空对象{},部分为空数组[]。
- 当接口返回的
data为{}时,你用List<dynamic>类型接收就会抛出_InternalLinkedHashMap不能转换为List的错误 - 当接口返回的
data为[]时,你用Map<String, dynamic>类型接收就会抛出List不能转换为Map的错误
你之前用var声明中间变量测试时刚好命中了data返回[]的场景,所以赋值给List类型变量运行正常,并不是中间变量解决了类型不匹配问题,只是测试场景刚好匹配了对应类型。
无需中间变量的赋值方案
方案1:兼容两种返回类型(推荐)
先做运行时类型判断,再对应处理,可适配data既可能是数组也可能是对象的场景:
// 示例:统一将data转为List类型,空对象时返回空数组 List<dynamic> result = json["data"] is List ? json["data"] : []; // 如果需要保留空对象的场景,也可以声明为dynamic类型接收 dynamic result = json["data"];
方案2:显式强转(仅确认返回类型时使用)
如果业务逻辑已经确定本次请求返回的data一定是数组类型,可以用as关键字直接强转:
List<dynamic> result = json["data"] as List<dynamic>;
内容的提问来源于stack exchange,提问作者Chen Li Yong
相关产品推荐
相关产品推荐

