为什么我无法从JSON获取数据值-Flutter

亮码

我正在尝试categories.json使用flutter从我的json文件中获取值,但是总是收到错误或它没有显示,我真的不知道出什么问题了。这是我的main.dart

 Future<List<Category>> loadData() async {
    String jString = await rootBundle.loadString("assets/categories.json");
    List<dynamic> jRes = jsonDecode(jString);
    List<Category> datas = jRes.map((e) => Category.fromJson(e)).toList();
    return datas;
  }


Container(
  child: FutureBuilder<List<Category>>(
      future: loadData(),
      builder: (context, data) {
        if (data.connectionState != ConnectionState.waiting &&
            data.hasData) {
          var userList = data.data;
          return ListView.builder(
              itemCount: userList.length,
              itemBuilder: (context, index) {
                var userData = userList[index];
                return Column(
                  children: [
                    Text("Category: ${userData.catName}"),
                  ],
                );
              });
        } else {
          return Center(
            child: CircularProgressIndicator(),
          );
        }
      })),

和我的模型

class Category {
  String catId;
  String catName;
  SubCategory subcat;

  Category({this.catId, this.catName, this.subcat});
  factory Category.fromJson(Map<String, dynamic> json) {
    return Category(
      catId: json['cat_id'],
      catName: json['category'],
      subcat: SubCategory.fromJson(json['cat_subcategory']),
    );
  }
  Map<String, dynamic> toJson() {
    return {
      "cat_id": catId,
      "category": catName,
    };
  }
}

class SubCategory {
  String subName, subImage;

  SubCategory({this.subName, this.subImage});
  factory SubCategory.fromJson(Map<String, dynamic> json) {
    return SubCategory(subName: json['sub_name'], subImage: json['sub_image']);
  }
  Map<String, dynamic> toJson() {
    return {
      "sub_name": subName,
      "sub_image": subImage,
    };
  }
}

最后是我的category.json文件

[{
        "category": "Design & Creativity",
        "cat_id": "1",
        "cat_subcategory": [
            {
                "sub_name": "Ads",
                "sub_image": "https://images.unsplash.com/photo-1589838017489-9198a27bd040?ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mnx8YWR2ZXJ0aXNlbWVudHxlbnwwfHwwfA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
            }
           
          
        ]
    }]

//There are more of them

当我运行它时面临的问题是,它仅CircularProgressIndicator()main.dart中显示给我,而当我删除if语句时,它说Another exception was thrown: NoSuchMethodError: The getter 'length' was called on null.请如何解决此问题,如果您需要更多说明,请告诉我

PS:当我检查loadData()值时会说type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'

编辑:谢谢大家的答案,但我所做的是使用此网站模型生成器生成模型

我就能得到价值

躁狂

就个人而言,当我想从json文件加载数据时,我这样做:

  Future<List<Category>> loadData() async {
    List<Category> datas = [];
    return rootBundle.loadString("assets/categories.json").then((value) {
      List<dynamic> jRes = jsonDecode(value);
      jRes.forEach((element) {
        datas.add(Category.fromJson(element));
      });
      return datas;
    });
  }

另外,在SubCategory类中

factory SubCategory.fromJson(Map<String, dynamic> json) {
    return SubCategory(subName: json['sub_name'], subImage: json['sub_image']);
  }

您的fromJson()需要Map <String,dynamic>

但是,如果您查看文件

"cat_subcategory": [
            {
                "sub_name": "Ads",
                "sub_image": "https://images.unsplash.com/photo-1589838017489-9198a27bd040?ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mnx8YWR2ZXJ0aXNlbWVudHxlbnwwfHwwfA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
            }
           
          
        ]

您可以看到cat_subcategory是一个列表

因此,您要给您的SubCategory.fromJson()提供一个列表,而不是一个Map。如果要提供地图,只需提供列表的第一个索引

您的Category.fromJson()成为

factory Category.fromJson(Map<String, dynamic> json) {
    return Category(
      catId: json['cat_id'],
      catName: json['category'],
      subcat: SubCategory.fromJson(json['cat_subcategory'][0]),
    );
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Flutter NotificationListener无法捕获我的通知?

来自分类Dev

为什么我的函数无法从JSON文件获取数据?

来自分类常见问题

无法使用Flutter从Firestore获取数据

来自分类Dev

无法使用Flutter从Firestore获取数据

来自分类Dev

从json flutter获取数组

来自分类Dev

为什么我无法获取输入值?

来自分类Dev

为什么下载依赖时我的flutter应用程序无法编译?

来自分类Dev

为什么flutter pub无法找到我的github的ssh-key?

来自分类Dev

构建版本apk后,我的flutter应用程序无法从http获取数据

来自分类Dev

我如何在Flutter中没有密钥的情况下获取JSON数据?

来自分类Dev

Flutter,获取数据库记录,然后获取Internet JSON

来自分类Dev

为什么我无法使用Jooq的into方法获取类中的数据库字段值?

来自分类Dev

为什么Flutter中的HTTP请求无法正常工作?

来自分类Dev

为什么我应该在Flutter中使用Cards?

来自分类Dev

Flutter / Dart-为什么我的Future返回Null?

来自分类Dev

在JSON Flutter中获取对象

来自分类Dev

从JSON API Flutter获取项目

来自分类Dev

Flutter Rest API获取JSON

来自分类Dev

为什么我无法从mongodb数据库获取数据?

来自分类Dev

Flutter - 无法解析 json 数组

来自分类Dev

Flutter BLoC无法更新我的布尔值列表

来自分类Dev

在Flutter中对JSON数据求和

来自分类Dev

为什么我的Swift代码无法基于.json数据中的值正确计算分数

来自分类Dev

为什么我的Swift代码无法基于.json数据中的值正确计算分数

来自分类Dev

我的数据库应该存储在Flutter的什么位置?

来自分类Dev

没有从JSON列表中获取所需的值-Flutter

来自分类Dev

Flutter无法导入`flutter_webrtc.dart`

来自分类Dev

在Flutter中获取pHp数组或映射为JSON数据?

来自分类Dev

Flutter:获取json固定数据并按字母顺序排序

Related 相关文章

  1. 1

    为什么Flutter NotificationListener无法捕获我的通知?

  2. 2

    为什么我的函数无法从JSON文件获取数据?

  3. 3

    无法使用Flutter从Firestore获取数据

  4. 4

    无法使用Flutter从Firestore获取数据

  5. 5

    从json flutter获取数组

  6. 6

    为什么我无法获取输入值?

  7. 7

    为什么下载依赖时我的flutter应用程序无法编译?

  8. 8

    为什么flutter pub无法找到我的github的ssh-key?

  9. 9

    构建版本apk后,我的flutter应用程序无法从http获取数据

  10. 10

    我如何在Flutter中没有密钥的情况下获取JSON数据?

  11. 11

    Flutter,获取数据库记录,然后获取Internet JSON

  12. 12

    为什么我无法使用Jooq的into方法获取类中的数据库字段值?

  13. 13

    为什么Flutter中的HTTP请求无法正常工作?

  14. 14

    为什么我应该在Flutter中使用Cards?

  15. 15

    Flutter / Dart-为什么我的Future返回Null?

  16. 16

    在JSON Flutter中获取对象

  17. 17

    从JSON API Flutter获取项目

  18. 18

    Flutter Rest API获取JSON

  19. 19

    为什么我无法从mongodb数据库获取数据?

  20. 20

    Flutter - 无法解析 json 数组

  21. 21

    Flutter BLoC无法更新我的布尔值列表

  22. 22

    在Flutter中对JSON数据求和

  23. 23

    为什么我的Swift代码无法基于.json数据中的值正确计算分数

  24. 24

    为什么我的Swift代码无法基于.json数据中的值正确计算分数

  25. 25

    我的数据库应该存储在Flutter的什么位置?

  26. 26

    没有从JSON列表中获取所需的值-Flutter

  27. 27

    Flutter无法导入`flutter_webrtc.dart`

  28. 28

    在Flutter中获取pHp数组或映射为JSON数据?

  29. 29

    Flutter:获取json固定数据并按字母顺序排序

热门标签

归档