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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:55:18