Dart http请求reqres.in接口返回数据与预期不符
问题原因与解决方法
原因分析
- 输出范围不匹配:你在代码里只打印了响应JSON中的
data字段,而预期的是包含page、per_page等字段的完整响应结构,所以实际输出自然只有数组数据,和预期不符。 - URL构造冗余:使用
Uri.https时,你同时在路径中写了?page=2,又通过第三个参数传入{'page': '2'},导致URL中出现重复的page参数(最终URL为https://reqres.in/api/users?page=2&page=2),虽然reqres.in会处理这种情况,但属于不必要的错误写法。 - 缺失必要导入:代码中使用了
convert.jsonDecode但未导入dart:convert包,运行时会触发错误,你能拿到返回数据大概率是实际代码中导入了但粘贴时遗漏。
解决步骤
- 打印完整响应:将
print(jsonResponse['data']);修改为print(jsonResponse);,即可看到包含所有预期字段的完整响应内容。 - 修正URL写法:二选其一即可:
// 推荐:通过Uri的查询参数构造 final url = Uri.https('reqres.in', '/api/users', {'page': '2'}); // 或者直接解析完整URL字符串 final url = Uri.parse('https://reqres.in/api/users?page=2'); - 补全导入语句:在代码顶部添加
import 'dart:convert';,确保jsonDecode能正常运行。
修正后完整代码
import 'package:http/http.dart' as http; import 'dart:convert'; void main(List<String> arguments) async { final url = Uri.https('reqres.in', '/api/users', {'page': '2'}); var response = await http.get(url); if (response.statusCode == 200) { var jsonResponse = jsonDecode(response.body) as Map<String, dynamic>; print(jsonResponse); } else { print('请求失败,状态码:${response.statusCode}'); } }
内容的提问来源于stack exchange,提问作者Lars Kuerten
相关产品推荐
相关产品推荐

