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

Dart http请求reqres.in接口返回数据与预期不符

问题原因与解决方法

原因分析

  1. 输出范围不匹配:你在代码里只打印了响应JSON中的data字段,而预期的是包含page、per_page等字段的完整响应结构,所以实际输出自然只有数组数据,和预期不符。
  2. URL构造冗余:使用Uri.https时,你同时在路径中写了?page=2,又通过第三个参数传入{'page': '2'},导致URL中出现重复的page参数(最终URL为https://reqres.in/api/users?page=2&page=2),虽然reqres.in会处理这种情况,但属于不必要的错误写法。
  3. 缺失必要导入:代码中使用了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:42:41