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

Flutter/Dart调用fromJson提示需Map却传入_JsonMap怎么解决

问题根源澄清

_JsonMap 是 Dart dart:convert 库中JSON解析后的内部实现类型,本身就实现了 Map<String, dynamic> 接口,外层传入fromJson的参数本身没有类型问题,你误读了报错的堆栈层级,错误实际发生在生成的序列化代码内部处理嵌套字段的阶段。

具体错误原因

你定义的 Section 类中 permissions 字段类型和实际JSON结构不匹配:

  • 代码里声明的类型是 List<UserBasedPermission>?,期望接收数组结构
  • 测试JSON中 permissions 是单个对象结构:{"read_write_users":null,...},反序列化时会尝试把对象转成列表,触发类型不匹配报错。

解决步骤

  1. 修正permissions字段类型
    将Section类中的permissions声明改为匹配JSON结构的单个对象类型:
// 修正前
// late List<UserBasedPermission>? permissions;
// 修正后
late UserBasedPermission? permissions;
  1. 补齐嵌套类的序列化配置
    确保所有嵌套的自定义类型都完成json_serializable配置:
  • BaseInfo、Comment、UserBasedPermission 三个类都要添加 @JsonSerializable() 注解
  • 三个类都要实现对应的 fromJson 工厂方法、toJson 实例方法
  1. 重新生成序列化代码
    执行命令重新生成.g.dart序列化文件:
# 纯Dart项目
dart run build_runner build
# Flutter项目
flutter pub run build_runner build
  1. 可选:显式转换外层JSON类型
    如果运行时仍有外层类型提示问题,可显式转换解析结果:
Map<String, dynamic> parsedJson = Map<String, dynamic>.from(jsonDecode(test));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:01