如何从RapidAPI的JSON响应中获取shows列表数据?
获取RapidAPI中shows数据的处理方法
首先得明确新接口返回的JSON结构——这是提取数据的核心前提。你可以先把返回的完整数据打印出来,或者在调试模式下查看层级:
Map data = jsonDecode(response.body); print(data); // 打印完整结构,找到shows的位置
根据不同的JSON结构,对应不同的提取方式:
情况1:shows是results数组中每个元素的直接属性
如果返回结构类似:
{ "results": [ {"shows": [{"id": 1, "name": "show1"}, ...]}, {"shows": [{"id": 2, "name": "show2"}, ...]} ] }
可以用类似之前的循环逻辑,遍历results并提取shows:
Map data = jsonDecode(response.body); List _temp = []; // 先处理results为空的情况,避免报错 List results = data['results'] as List? ?? []; for (var item in results) { // 取出当前item的shows数组,为空则跳过 List? shows = item['shows'] as List?; if (shows != null) { _temp.addAll(shows); // 把所有shows合并到一个数组里 } } // 最后用你的模型类转换数据 return Shows.showsFromSnapshot(_temp);
情况2:shows是顶层直接字段
如果返回结构里shows直接在根节点:
{ "shows": [{"id": 1, "name": "show1"}, ...], "otherField": "xxx" }
直接提取顶层的shows数组即可:
Map data = jsonDecode(response.body); List showsList = data['shows'] as List? ?? []; return Shows.showsFromSnapshot(showsList);
情况3:shows在嵌套层级中
如果shows藏在更深的层级,比如results -> item -> content -> shows,只需要调整取值路径:
for (var item in results) { var content = item['content']; if (content != null) { List? shows = content['shows'] as List?; if (shows != null) { _temp.addAll(shows); } } }
注意事项
- 一定要做空安全判断,避免接口返回null或字段缺失导致崩溃;
- 如果shows不是数组而是单个对象,把
addAll改成add即可; - 打印出来的JSON结构可以用编辑器的JSON插件整理,更清晰地看层级关系。
内容的提问来源于stack exchange,提问作者Farhan Ashari
相关产品推荐
相关产品推荐

