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
相关产品推荐
相关产品推荐

