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

Flutter/Dart JSON编解码报错:List<dynamic>无法转为List<int>

解决Dart JSON解码时List转List的_CastError问题

问题原因

json.decode解析JSON数组后返回的是List<dynamic>类型,哪怕数组内全是整数,Dart也不允许直接将List<dynamic>强转为List<int>——这两种泛型列表在类型系统中是不兼容的,直接强转就会触发_CastError。

两种可行的修复方案

方案1:使用map+toList逐个转换元素

显式遍历列表元素,将每个dynamic类型的元素转为int,再生成新的List<int>:

scheduledTimes: (json['scheduledTimes'] as List).map((e) => e as int).toList(),

方案2:使用List.castFrom类型转换

利用Dart内置的List.castFrom方法,直接将List<dynamic>转换为List<int>:

scheduledTimes: List.castFrom<dynamic, int>(json['scheduledTimes'] as List),

修正后的完整代码示例

import 'package:equatable/equatable.dart';

class Obj extends Equatable {
  final List<int> scheduledTimes;
  final bool active;

  const Obj({
    required this.scheduledTimes,
    required this.active,
  });

  factory Obj.fromJson(Map<String, dynamic> json) {
    return Obj(
      // 二选一替换即可
      scheduledTimes: (json['scheduledTimes'] as List).map((e) => e as int).toList(),
      active: json['active'] as bool,
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'scheduledTimes': scheduledTimes,
      'active': active,
    };
  }

  @override
  List<Object?> get props => [scheduledTimes, active];
}

额外注意事项

如果JSON数组中可能存在非整数类型的元素,建议在转换时增加类型判断,避免触发新的类型错误,示例:

scheduledTimes: (json['scheduledTimes'] as List)
    .map((e) => e is int ? e : 0) // 非int元素默认设为0,可根据需求调整
    .toList(),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:12:57