Flutter中如何解析GET请求返回的数组型API响应并为变量赋值
问题原因
你当前接口返回的JSON最外层是数组结构,json.decode()解析后返回的是List<dynamic>类型,你沿用之前直接转为Map的写法会触发类型转换异常,无法正常读取字段。
修复后代码
修改解析部分的逻辑,先拿到数组后取第一个元素再读取字段即可:
Future<Null> example(String? task_id) async { HttpClient client = HttpClient(); client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true); // 原代码url拼接存在语法错误,已修正为字符串插值写法 final String url = "${urlVar}?id=$task_id"; final request = await client .getUrl(Uri.parse(url)) .timeout(const Duration(seconds: 5)); HttpClientResponse response = await request.close(); var responseBody = await response.transform(utf8.decoder).join(); // 核心修改:先解析为List,再取第一个元素作为目标Map List jsonList = json.decode(responseBody); if (response.statusCode == 200 && jsonList.isNotEmpty) { Map jsonResponse = jsonList.first; global.taskId = jsonResponse['id']; global.taskName = jsonResponse['name']; } }
补充注意事项
- 增加了数组非空判断,避免接口返回空数组时触发下标越界异常
- 如果需要更规范的类型安全,可以进一步把
List强转为List<Map<String,dynamic>>类型,避免后续读取字段时的类型推导问题
内容的提问来源于stack exchange,提问作者Andrii Havrylyak
相关产品推荐
相关产品推荐

