Flutter中如何将列表内的列表格式字符串转为列表类型
Flutter中将字符串格式列表转为实际List类型的实现方法
针对你给出的List<Map<String, dynamic>>数据,要把每个元素中detail字段的字符串格式列表转为实际List类型,这里提供两种实用方案:
方案一:借助JSON解析(通用性最强)
因为detail的字符串格式和JSON数组类似,仅需将单引号替换为双引号,就能用jsonDecode解析为List:
import 'dart:convert'; void main() { List<Map<String, dynamic>> category = [ { "name": "One", "detail": "['1', '1', '1', '1', '1', '1']" }, { "name": "two", "detail": "['2', '2', '2', '2', '2', '2']" }, { "name": "three", "detail": "['3', '3', '3', '3', '3', '3']" }, ]; // 转换处理 final convertedCategory = category.map((item) { // 替换单引号为双引号,适配JSON格式 final jsonStr = item['detail'].replaceAll("'", '"'); // 解析为List<String> final detailList = List<String>.from(jsonDecode(jsonStr)); // 返回新的Map,保留原字段并更新detail return {...item, 'detail': detailList}; }).toList(); // 验证类型 print(convertedCategory[0]['detail'] is List); // 输出 true }
方案二:正则表达式提取(适合固定格式场景)
如果确定detail的字符串格式始终是['x', 'x', ...]这种固定结构,用正则提取单引号间的内容更直接:
void main() { List<Map<String, dynamic>> category = [ { "name": "One", "detail": "['1', '1', '1', '1', '1', '1']" }, { "name": "two", "detail": "['2', '2', '2', '2', '2', '2']" }, { "name": "three", "detail": "['3', '3', '3', '3', '3', '3']" }, ]; final convertedCategory = category.map((item) { final detailStr = item['detail']; // 匹配所有单引号包裹的内容 final regExp = RegExp(r"'([^']+)'"); final matches = regExp.allMatches(detailStr); // 提取匹配到的内容转为List final detailList = matches.map((match) => match.group(1)!).toList(); return {...item, 'detail': detailList}; }).toList(); print(convertedCategory[1]['detail']); // 输出 [2, 2, 2, 2, 2, 2] }
方案选择建议
- 优先用JSON解析方案:只要字符串格式接近JSON数组(即使后续字段内容有变化),都能稳定解析;
- 正则方案适合格式完全固定的场景,避免JSON解析可能遇到的格式兼容问题(比如字符串中包含特殊字符时)。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

