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

Flutter使用fromJson将JSON转Model始终失败问题求助

JSON转Model失败:'null is not subtype of type string in type cast'

使用Freezed生成的fromJson方法解析JSON时抛出null is not subtype of type string in type cast错误,但手动调用构造函数初始化Model完全正常,且已确认JSON中所有必填字段均不为null。

我的Model代码

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user_model.g.dart';
part 'user_model.freezed.dart';

@freezed
class UserModel with _$UserModel {
  const factory UserModel({
    required String id,
    required String identity,
    required String name,
    required String email,
    required String phone,
    required String role,
    required String? createdAt,
    required String? updatedAt,
    required String? accountVerifiedAt,
    required String jsonWebToken,
  }) = _UserModel;

  const UserModel._();

  factory UserModel.fromJson(Map<String, dynamic> json) =>
      _$UserModelFromJson(json);
}

报错的解析代码

var user = UserModel.fromJson(object['data']);

可正常运行的手动构造代码

var user = UserModel(
        id: object['data']['id'],
        identity: object['data']['identity'],
        name: object['data']['name'],
        email: object['data']['email'],
        phone: object['data']['phone'],
        role: object['data']['role'],
        createdAt: object['data']['createdAt'],
        updatedAt: object['data']['updatedAt'],
        accountVerifiedAt: object['data']['accountVerifiedAt'],
        jsonWebToken: object['data']['jsonWebToken'],
      );

解决方案

  • 检查字段名大小写匹配
    Freezed自动生成的序列化代码严格匹配字段名大小写。如果JSON中的字段是下划线命名(比如created_at),但Model参数是小驼峰(createdAt),会导致解析时无法找到对应字段,返回null触发类型转换错误。手动构造时你手动映射了字段,所以不受影响。

  • 验证字段类型一致性
    即使字段值不为null,若JSON中字段类型和Model定义不符(比如id是数字类型,但Model定义为String),Freezed的强类型转换会直接报错。手动构造时Dart会做隐式类型转换,所以不会出问题。可以打印字段类型确认:

print('id类型: ${object['data']['id'].runtimeType}');
print('jsonWebToken类型: ${object['data']['jsonWebToken'].runtimeType}');
  • 重新生成序列化代码
    修改Model后若未重新生成代码,_$UserModelFromJson可能和当前Model定义不匹配。执行命令重新生成:
flutter pub run build_runner build --delete-conflicting-outputs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:15:58