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

Flutter解析JSON遇_InternalLinkedHashMap类型转换错误求解决

Flutter JSON解析:提取数组中所有userName的列表

示例JSON

{    
    "statusCode": 200,    
    "message": "",    
    "result": [        
        {             
            "userName": "RAJ",
            "hierarchyLevel": 3,
            "sequence": 1,
            "isSuccess": 1
        },
        {
            "userName": "SAM",
            "hierarchyLevel": 3,
            "sequence": 1,
            "isSuccess": 1         
        }
    ]
}

原代码

int jsonStatus = response.statusCode;                  
if (jsonStatus == 200) {                    
    var jsonData = json.decode(response.body);                    
    if (jsonData["statusCode"] == 200) {                      
        List<dynamic> listValJson = jsonData["result"];                      
        List<String> userList = new List<String>.from(listValJson);                    
    }          
}

报错信息

Error: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

问题原因与解决方案

错误原因

listValJson中的每一项是_InternalLinkedHashMap<String, dynamic>类型(对应JSON里的对象),而List<String>.from(listValJson)试图直接把这些Map转换成String,导致类型不匹配报错。

正确写法

遍历listValJson,逐个取出每个对象里的userName字段,再收集成字符串列表:

int jsonStatus = response.statusCode;                  
if (jsonStatus == 200) {                    
    var jsonData = json.decode(response.body);                    
    if (jsonData["statusCode"] == 200) {                      
        List<dynamic> listValJson = jsonData["result"];                      
        // 提取所有userName并转为String列表
        List<String> userList = listValJson
            .map((item) => item["userName"] as String)
            .toList();                    
    }          
}

进阶优化(可选)

如果JSON结构复杂或需要频繁解析,建议创建实体类配合json_serializable包实现类型安全的解析:

  1. 添加依赖到pubspec.yaml:
dependencies:
  json_annotation: ^4.8.1

dev_dependencies:
  build_runner: ^2.4.4
  json_serializable: ^6.7.0
  1. 创建User实体类:
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  final String userName;
  final int hierarchyLevel;
  final int sequence;
  final int isSuccess;

  User({
    required this.userName,
    required this.hierarchyLevel,
    required this.sequence,
    required this.isSuccess,
  });

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
  1. 运行命令生成序列化代码:
flutter pub run build_runner build
  1. 解析JSON:
int jsonStatus = response.statusCode;                  
if (jsonStatus == 200) {                    
    var jsonData = json.decode(response.body);                    
    if (jsonData["statusCode"] == 200) {                      
        List<dynamic> listValJson = jsonData["result"];                      
        List<User> users = listValJson.map((item) => User.fromJson(item)).toList();
        List<String> userList = users.map((user) => user.userName).toList();                    
    }          
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:17:38