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
相关产品推荐
相关产品推荐

