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

Flutter读取本地JSON文件时遇到空值异常问题求助

Flutter读取本地JSON空值异常排查与解决

异常原因分析

  • 资源配置缺失:assets/text_file.json未在pubspec.yaml中注册,导致加载失败返回空内容,触发后续解析异常。
  • JSON文件问题:文件内容为空,或JSON格式不合法(如括号不匹配、引号缺失),导致jsonDecode返回null,调用isNotEmpty时触发空值错误。
  • 解析逻辑漏洞:userFromJson函数对JSON数据的处理存在问题,或原代码未对jsonData的类型/空值做校验。

解决方法

1. 确认资源配置

在pubspec.yaml中正确声明assets路径,执行flutter pub get刷新:

flutter:
  assets:
    - assets/text_file.json

2. 校验JSON文件

确保assets/text_file.json内容非空且格式正确,示例合法数组格式:

[
  {"id": 1, "name": "Alice"},
  {"id": 2, "name": "Bob"}
]

可通过JSON校验工具验证格式有效性。

3. 优化代码空安全

增强代码的异常捕获与空值判断,避免直接调用可能为null的对象方法:

Future<List<User>> allUsers() async {
  try {
    var response = await rootBundle.loadString("assets/text_file.json");
    if (response.isEmpty) return [];

    var jsonData = jsonDecode(response);
    if (jsonData is List && jsonData.isNotEmpty) {
      return userFromJson(jsonData);
    }
    return [];
  } catch (e) {
    print("JSON加载/解析错误: $e");
    return [];
  }
}

4. 检查解析函数

确认userFromJson及User.fromJson能正确处理JSON数据,示例解析逻辑:

List<User> userFromJson(List<dynamic> jsonList) {
  return jsonList.map((json) => User.fromJson(json)).toList();
}

class User {
  final int id;
  final String name;

  User({required this.id, required this.name});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'] as int,
      name: json['name'] as String,
    );
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:18:14