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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:41:13