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

如何在Dart/Flutter中实现未知键的JSON对象全值搜索过滤?

实现未知键的JSON全值搜索过滤

核心思路

写一个递归函数,遍历目标JSON对象的所有层级的键值对,检查是否存在任意值包含搜索字符串。只要对象中某一个值匹配,就将该对象纳入过滤结果。

Dart 实现示例

首先实现递归检查函数:

bool hasMatchingValue(dynamic obj, String searchString) {
  // 处理字符串类型,直接判断是否包含
  if (obj is String) {
    return obj.contains(searchString);
  }
  // 处理数组类型,遍历每个元素递归检查
  if (obj is List) {
    return obj.any((item) => hasMatchingValue(item, searchString));
  }
  // 处理对象类型,遍历所有值递归检查
  if (obj is Map) {
    return obj.values.any((value) => hasMatchingValue(value, searchString));
  }
  // 其他类型(数字、布尔等),直接返回false;若需匹配可转字符串判断
  return false;
}

然后用这个函数替换原来的指定键判断:

// 假设object是List<Map>类型的集合
final filteredObjects = object.where((o) => hasMatchingValue(o, searchString)).toList();

补充说明

  • 如果需要匹配数字、布尔等非字符串类型,可以在递归函数里添加类型转换判断:
    if (obj is num || obj is bool) {
      return obj.toString().contains(searchString);
    }
    
  • 递归逻辑会自动处理嵌套的JSON结构(比如对象里的数组、数组里的对象),无需额外处理层级问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:17:33