Dart中JSON解析函数调用错误排查与正确实现方法
Dart解析JSON:QuickType生成实体类的正确调用方式
核心步骤回顾
API请求获取JSON字符串 → 传入QuickType生成的解析函数 → 处理解析结果及异常
常见错误修正与正确调用示例
1. 确保传入解析函数的是响应体字符串而非Response对象
这是新手最容易犯的错误:
// ❌ 错误写法:直接传入Response对象 var response = await http.get(Uri.parse(apiUrl)); var data = getDataFromApiFromJson(response); // ✅ 正确写法:传入response.body字符串,先校验请求状态 var response = await http.get(Uri.parse(apiUrl)); if (response.statusCode == 200) { var data = getDataFromApiFromJson(response.body); // 处理解析后的实体类数据 } else { throw Exception('API请求失败,状态码:${response.statusCode}'); }
2. 匹配API实际返回的JSON结构
如果QuickType生成的类是基于你提供的样本JSON,但实际API返回结构不一致(比如样本是对象,实际返回数组;字段名大小写/拼写不符),必然解析失败。
- 解决:抓包或打印
response.body获取真实返回的JSON,复制到QuickType重新生成实体类。
3. 适配数组类型的JSON返回
如果API返回的是JSON数组,QuickType生成的解析函数会是List<YourEntity>类型,调用时直接接收:
// 假设生成的解析函数为List<DataItem> dataItemFromJson(String str) List<DataItem> dataList = dataItemFromJson(response.body);
4. 捕获解析异常排查问题
即使结构匹配,也可能出现数据类型不兼容(比如API返回字符串但实体类定义为int),用try-catch捕获并排查:
try { var data = getDataFromApiFromJson(response.body); } catch (e) { print('解析错误详情:$e'); // 打印真实返回内容辅助排查 print('API返回原始内容:${response.body}'); }
5. 确认依赖包导入正确
确保代码顶部导入了必要的包:
import 'dart:convert'; import 'package:http/http.dart' as http; // 导入QuickType生成的实体类文件 import 'your_generated_entity.dart';
内容的提问来源于stack exchange,提问作者LostTexan
相关产品推荐
相关产品推荐

