You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从HTTP响应JSON中提取指定条件匹配的field_value值

Dart/Flutter 提取接口响应指定字段实现

你可以直接按JSON结构逐层遍历匹配,不需要引入额外依赖,实现逻辑如下:

  • 先对响应体做JSON解码,按层级定位到ListNode数组
  • 遍历ListNode找到id值为100001的目标节点
  • 在目标节点的field数组中,匹配field_name为common_desc_0的字段块,取出对应的field_value就是需要展示的留言内容

修改后的可运行代码如下:

var response = await http.get(
  Uri.parse(
      'http://192.168.1.8:8080/HongLeong/MENU_REQUEST.do?_dc=1657717579436&table_id=25018&id_MenuAction=3&reset_context=1&ViewType=MENU_REQUEST&gui_open_popup=1&id_Window=5&activeWindowId=mw_5&noOrigUserDate=true&LocalDate=20220713&LocalTime=21061900&TimeZone=Asia/Shanghai&UserDate=0&UserTime=0&server_name=OPRISK_DATACOLLECTOR&key_id_list=&cell_context_id=0&id_Desktop=100237&operation_key=1000007&operation_sub_num=-1&is_json=1&is_popup=0&is_search_window=0&ccsfw_conf_by_user=0&is_batch=0&previousToken=1657717554097&historyToken=1657717579434&historyUrl=1'),
  headers: {HttpHeaders.cookieHeader: cookies},
);

// 解码JSON响应
final responseJson = jsonDecode(response.body);
// 定位到列表节点数组
final listNodes = responseJson['RESPONSE']['GenericListAnswer']['ListNode'] as List;
String boardMessage = '';

// 匹配id=100001的目标条目
for (final node in listNodes) {
  if (node['id'] == '100001') {
    final fields = node['field'] as List;
    // 匹配common_desc_0字段
    for (final fieldItem in fields) {
      if (fieldItem['field_name'] == 'common_desc_0') {
        boardMessage = fieldItem['field_value'];
        break;
      }
    }
    break;
  }
}

// 后续业务逻辑:存缓存、渲染留言板
await WriteCache.setString(key: "cache", value: boardMessage);
print('提取到的留言内容:$boardMessage');

补充说明:如果要兼容接口异常、结构缺失的场景,可以在取值前加空安全校验、类型判断,避免非预期结构导致程序崩溃。最终提取到的boardMessage值就是There are 6 Users currently in the status S030 - Approved,可以直接传入留言板组件渲染。

内容的提问来源于stack exchange,提问作者JoshuaaMarkkNairr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23