如何从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
相关产品推荐
相关产品推荐

