Flutter报错:type 'String' is not a subtype of type 'int' of 'index' 求解
解决Dio获取JSON转实体类时的
type 'String' is not a subtype of type 'int' of 'index'错误 错误原因
你调用的接口返回的是包含多个单词对象的数组(List),但代码错误地将整个数组当作单个Word对象去解析。当Word.fromJson方法执行json['kelime']时,因为json实际是List类型,只能用int类型的索引(如json[0]),用字符串'kelime'作为索引就会触发类型不匹配错误。
解决方案
1. 调整数据存储类型
把单个Word对象改为存储List<Word>集合:
List<Word> wordData = [];
2. 修正数据解析逻辑
在getWordData方法中,遍历返回的数组,将每个元素转换为Word对象:
@override void initState() { super.initState(); getWordData(); } getWordData() async { var dio = Dio(); var response = await dio.get("https://raw.githubusercontent.com/saturu/turkish_dictionary/main/4_letter.json"); // 校验返回数据类型后逐个解析为Word对象 if (response.data is List) { wordData = (response.data as List).map((item) => Word.fromJson(item)).toList(); } // 异步操作完成后更新UI setState(() {}); print("共获取到${wordData.length}个单词"); }
3. 修复原代码语法错误
原initState方法存在多余的);,已在上述代码中修正。
原Word类无需修改
你的Word类实现正确,负责解析单个单词的JSON对象,保留即可:
class Word { Word({ String? kelime, String? anlami, }) { _kelime = kelime; _anlami = anlami; } Word.fromJson(dynamic json) { _kelime = json['kelime']; _anlami = json['anlami']; } String? _kelime; String? _anlami; Word copyWith({ String? kelime, String? anlami, }) => Word( kelime: kelime ?? _kelime, anlami: anlami ?? _anlami, ); String? get kelime => _kelime; String? get anlami => _anlami; Map<String, dynamic> toJson() { final map = <String, dynamic>{}; map['kelime'] = _kelime; map['anlami'] = _anlami; return map; } }
内容的提问来源于stack exchange,提问作者Aytül
相关产品推荐
相关产品推荐

