You need to enable JavaScript to run this app. Flutter使用http get方法提取结构化JSON指定对象的实现
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用http get方法提取结构化JSON指定对象的实现

基于http库实现嵌套JSON响应的目标字段提取

纯http库和Chopper的核心差异在于:Chopper会在内部自动完成响应字符串到结构化Map的转换,纯http库默认只返回字符串格式的响应体,需要手动完成解码后才能按键取值。

具体实现步骤:

  • 引入核心依赖:需要导入dart:convert用于JSON解码,以及官方http包的请求能力
  • 完成GET请求后,先校验响应状态码,避免非200状态下的无效解析
  • 调用jsonDecode方法将响应体字符串转换为Map<String, dynamic>结构
  • 直接通过键名索引提取目标user对象即可,取值逻辑和Chopper中完全一致

可直接复用的实现代码:

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<Map<String, dynamic>?> getTargetUser() async {
  final res = await http.get(Uri.parse('你的接口请求地址'));
  
  if (res.statusCode != 200) {
    throw Exception('请求异常,状态码:${res.statusCode}');
  }
  
  // 手动完成JSON解码,这是和Chopper的唯一操作差异
  final decodedData = jsonDecode(res.body);
  // 直接按键名提取user对象,适配空安全做可空标注
  final user = decodedData['user'] as Map<String, dynamic>?;
  
  return user;
}

注意事项:

  • 空安全适配:取值时可根据接口的实际返回规则加可空标注,避免硬转非空类型导致的运行时崩溃;需要更强鲁棒性时,可在JSON解码后先判断返回结构的类型,再执行后续取值操作。
  • 如果解码过程抛出FormatException,先检查接口返回的JSON格式是否合法,比如示例结构中"email:""example@email.com"为缺漏引号的非法格式,修正为"email": "example@email.com"后即可正常解析。
  • 不需要额外引入序列化、反射类依赖,只要响应结构匹配,提取逻辑和Chopper中的response.body["user"]完全等价。

内容的提问来源于stack exchange,提问作者Davii The King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 01:45:02