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

Dart中JSON数据验证实现咨询:fromJson解析时验证年龄大于0及邮箱格式合法性

解决User.fromJson中的数据验证问题

嗨,我来帮你搞定这个JSON解析时的验证需求!首先先修正下你代码里的小语法问题,然后咱们一步步加上年龄和邮箱的验证逻辑,确保生成的User实例都是合法有效的。

首先,先看修正后的基础代码,咱们把fromJson和toJson的语法理顺:

class User {
  final int age;
  final String email;

  // 普通构造函数
  const User(this.age, this.email);

  // 从JSON解析的构造函数,这里加上验证逻辑
  User.fromJson(Map<String, dynamic> json)
      : age = json['age'],
        email = json['email'] {
    // 这里咱们添加验证逻辑
    _validateAge(age);
    _validateEmail(email);
  }

  // 转JSON的方法
  Map<String, dynamic> toJson() => {
        'age': age,
        'email': email,
      };

  // 年龄验证方法
  void _validateAge(int age) {
    if (age <= 0) {
      throw ArgumentError('年龄必须大于0,当前值:$age');
    }
  }

  // 邮箱格式验证方法
  void _validateEmail(String email) {
    // 常用的邮箱正则表达式,适配大部分主流邮箱格式
    final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
    if (!emailRegex.hasMatch(email)) {
      throw ArgumentError('邮箱格式不合法,当前值:$email');
    }
  }
}

验证逻辑说明:

  • 年龄验证:在_validateAge方法里检查年龄是否大于0,如果不满足就抛出ArgumentError,这样在解析JSON时如果遇到无效年龄,会直接报错,避免生成不合法的User实例。
  • 邮箱格式验证:用一个标准的邮箱正则表达式来匹配输入的邮箱字符串,不匹配的话同样抛出异常,确保邮箱格式符合规范。

使用示例:

当你解析JSON时,如果数据不合法,就会触发异常,你可以用try-catch来处理:

void main() {
  // 合法数据
  final validJson = {'age': 25, 'email': 'test@example.com'};
  try {
    final user = User.fromJson(validJson);
    print('合法用户:${user.age}, ${user.email}');
  } catch (e) {
    print('解析错误:$e');
  }

  // 非法年龄数据
  final invalidAgeJson = {'age': -5, 'email': 'test@example.com'};
  try {
    final user = User.fromJson(invalidAgeJson);
    print('合法用户:${user.age}, ${user.email}');
  } catch (e) {
    print('解析错误:$e'); // 会输出:解析错误:年龄必须大于0,当前值:-5
  }

  // 非法邮箱数据
  final invalidEmailJson = {'age': 25, 'email': 'invalid-email'};
  try {
    final user = User.fromJson(invalidEmailJson);
    print('合法用户:${user.age}, ${user.email}');
  } catch (e) {
    print('解析错误:$e'); // 会输出:解析错误:邮箱格式不合法,当前值:invalid-email
  }
}

这样一来,所有通过fromJson生成的User实例都会自动经过验证,保证数据的合法性,后续使用时就不用再额外检查啦!

内容的提问来源于stack exchange,提问作者Norbert Prośniak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:57:46