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

动态列表无法从JSON数据映射 赋值List<Map<String,dynamic>>失败问题

问题原因
  • Dart 具备严格的静态类型检查逻辑,示例中使用var声明的jsondata所有键值均为 String 类型,编译器会自动将其推断为List<Map<String, String>>类型
  • Dart 的泛型类型不支持隐式向上转型,因此无法直接将窄类型的List<Map<String, String>>赋值给宽类型的List<Map<String, dynamic>>变量
解决方案

方案1:声明时直接指定类型

适合手动定义静态 JSON 数组的场景,声明时直接指定泛型类型即可直接赋值:

var jsondata = <Map<String, dynamic>>[
  {
    'value': '1',
    'label': 'Red',
  },
  {
    'value': '2',
    'label': 'Green',
  },
  {
    'value': '3',
    'label': 'Yellow',
  },
];

List<Map<String, dynamic>> _items = jsondata;

方案2:显式做集合类型转换

如果jsondata是从其他逻辑获取(比如其他模块传递、本地存储读取),可以用List.from方法完成类型转换:

var jsondata = [
  {
    'value': '1',
    'label': 'Red',
  },
  {
    'value': '2',
    'label': 'Green',
  },
  {
    'value': '3',
    'label': 'Yellow',
  },
];

List<Map<String, dynamic>> _items = List<Map<String, dynamic>>.from(jsondata);

方案3:服务端JSON字符串解析场景处理

如果数据来自服务端返回的JSON字符串,通过jsonDecode解析后直接转换即可:

import 'dart:convert';

// 示例为服务端返回的JSON数组字符串
String responseJson = '[{"value":"1","label":"Red"},{"value":"2","label":"Green"},{"value":"3","label":"Yellow"}]';
List<Map<String, dynamic>> _items = List<Map<String, dynamic>>.from(jsonDecode(responseJson));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:21:03