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反序列化转换,按以下步骤处理即可:
- 移除Dio中强制将响应数据转换为
Map类型的自定义拦截器/响应处理逻辑 - 直接将响应的
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
相关产品推荐
相关产品推荐

