Dart新手开发工单工具时无法将API返回JSON转换为对象求助
提问:Dart API返回数据转Map生成工单实例问题
项目与个人背景
- 项目说明:基于服务商API开发的便捷工单工具,用于分类管理工作中分配给我的工单。
- 个人背景:累计学习Dart仅19小时,即将完成首次编程训练营的学习。
核心问题
已经完成了服务台软件API的provider开发,能正常向API发送请求,但不知道如何将返回的数据转换为可用于生成工单实例的Map结构。
待实现目标
- 从API拉取数据
- 将返回的字符串转换为可遍历的JSON对象Map
- 遍历JSON对象生成工单对象实例
- 构建工单对象列表返回给请求方,用于生成Widget列表。
问题排查
尝试了所有能想到的方法将数据强转为Map都失败了,怀疑当前获取到的是Future而非实际数据,可能是对async/await的理解有问题:之前以为代码是链式执行的,不需要额外等待就能直接拿到字符串结果,但实际并非如此。
问题代码
class ticketingsoftwareAPIProvider { // 对象属性 Client _client = Client(); final String _ApiKey = "YOUSHALLPASS!"; final String apiRoot = "https://api.ticketingsoftware.com"; final String agentId = '2675309'; getAgentTickets() async { // HTTP请求头 Map<String, String> headers = { 'X-ticketingsoftware-Authorization': 'Bearer $_ApiKey', 'Accept': 'application/vnd.ticketingsoftware.v2.1+json', 'Content-Type': 'application/json' }; await _client .get(Uri.parse('$apiRoot/incidents.json?assigned_to=$agentId')) .then((data) { if (data.statusCode == 200) { print(json.decode(data.body)); // 无法将此处返回内容转为Map来生成对象 } }); } } } // 类结束
最终解决方案
List ticketJson = json.decode(data.body); for (var ticket = 0; ticket < ticketJson.length; ticket++) { thisAgentsTickets.add(incident.fromJson(ticketJson[ticket])); return thisAgentsTickets; }
问题原因
之前学习的课程内容太过陈旧是导致问题的原因。
内容的提问来源于stack exchange,提问作者DJ K
相关产品推荐
相关产品推荐

