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

