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

Flutter中List<String>类型JSON解码失败,如何解决类型不匹配问题?

解决Dart解析JSON时List与List类型不兼容问题

问题核心在于:JSON解析后json['message']返回的是List<dynamic>类型,但你的ErrorMessage类中message字段定义为List<String>,直接赋值会触发类型转换错误。以下是几种可行的解决方法:

方法一:使用cast<String>()快速转换

适用于确定列表内所有元素都是字符串的场景,直接将动态列表转为字符串列表:

class ErrorMessage {
  int statusCode;
  List<String> message;
  String error;

  ErrorMessage(this.statusCode, this.message, this.error);

  factory ErrorMessage.fromJson(Map<String, dynamic> json) => ErrorMessage(
    json['statusCode'] as int,
    (json['message'] as List).cast<String>(),
    json['error'] as String,
  );
}

方法二:通过map逐个转换元素

如果需要更严谨的类型校验(确保每个元素都是String),可以遍历列表逐个转换:

class ErrorMessage {
  int statusCode;
  List<String> message;
  String error;

  ErrorMessage(this.statusCode, this.message, this.error);

  factory ErrorMessage.fromJson(Map<String, dynamic> json) => ErrorMessage(
    json['statusCode'] as int,
    (json['message'] as List).map((item) => item as String).toList(),
    json['error'] as String,
  );
}

方法三:处理null情况(可选)

如果后端可能返回null作为message的值,建议添加空判断避免崩溃:

class ErrorMessage {
  int statusCode;
  List<String> message;
  String error;

  ErrorMessage(this.statusCode, this.message, this.error);

  factory ErrorMessage.fromJson(Map<String, dynamic> json) => ErrorMessage(
    json['statusCode'] as int,
    (json['message'] as List?)?.map((item) => item as String).toList() ?? [],
    json['error'] as String,
  );
}

另外,给json['statusCode']和json['error']加上as int/as String类型断言,能避免动态类型带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:05