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

Dart使用dio请求WP Rest API时数组响应转List遍历问题

Dio获取WP Rest API数组数据转可迭代列表方案

问题核心

  • 基于Dio库请求WordPress Rest API文章接口,接口返回顶层为数组的JSON结构
  • 当前请求处理后拿到的响应类型为Map<String, dynamic>,无法直接调用map方法迭代
  • 目标:转换得到可直接迭代的List<dynamic>类型数据

实现方案

WP原生文章接口(/wp-json/wp/v2/posts)默认直接返回数组格式响应,不需要额外做复杂JSON反序列化转换,按以下步骤处理即可:

  1. 移除Dio中强制将响应数据转换为Map类型的自定义拦截器/响应处理逻辑
  2. 直接将响应的data字段强转为List<dynamic>类型,即可获得支持迭代的列表结构

核心代码示例:

import 'package:dio/dio.dart';

final dio = Dio();

Future<List<dynamic>> getWpPosts() async {
  final res = await dio.get('替换为你的WP文章接口地址');
  if (res.statusCode != 200) {
    throw Exception('接口请求异常,状态码:${res.statusCode}');
  }
  // 核心转换逻辑:接口顶层为数组,直接强转即可
  List<dynamic> postList = res.data as List<dynamic>;

  // 后续可直接调用map迭代处理,示例:打印所有文章标题
  postList.map((item) {
    print(item['title']['rendered']);
  }).toList();

  return postList;
}

异常排查

如果强转时报类型不匹配错误,按以下方向排查:

  • 检查是否存在全局响应拦截器,将原始数组响应统一包装成了带code/data/msg字段的Map结构,如果是这种结构,取Map中对应存储数组的字段再做List强转即可,示例:
    // 假设拦截器包装后的响应结构为 {"code":200, "data": [], "msg":"请求成功"}
    final respMap = res.data as Map<String, dynamic>;
    List<dynamic> postList = respMap['data'] as List<dynamic>;
    
  • 打印res.data.runtimeType确认运行时实际数据类型,核对接口地址是否正确,避免请求到返回单对象/其他结构的错误接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:57:21