flutter如何通过jsontodart支持jsonschema
在Flutter开发中,使用json_serializable生成Dart模型时,能否直接支持JSON Schema规范?目前通过jsonToDart工具转换时,主要依赖JSON样本数据,但项目需要根据Schema定义更严格的类型校验(如字段必填、枚举值限制等)。是否有现成的方案或插件能在生成Dart代码时自动集成Schema验证逻辑?或者需要手动编写扩展验证逻辑?
2 回复
Flutter中,json_serializable不支持JSON Schema。可使用json_schema包验证数据,结合json_annotation手动定义模型。步骤:1. 添加依赖;2. 创建Dart类;3. 用json_schema验证输入数据。
更多关于flutter如何通过jsontodart支持jsonschema的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,通过 json_serializable 包可以生成类型安全的模型类,但原生不支持 JSON Schema。以下是实现方案:
1. 使用第三方工具转换
- 在线工具:将 JSON Schema 转换为 Dart 类(如 quicktype.io)
- 手动依据 Schema 定义编写 Dart 类
2. 自定义验证(推荐)
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
User({required this.name, required this.age});
// 从JSON生成实例
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
// 转换为JSON
Map<String, dynamic> toJson() => _$UserToJson(this);
// 自定义验证方法
void validate() {
if (name.isEmpty) throw ArgumentError('Name cannot be empty');
if (age < 0) throw ArgumentError('Age must be non-negative');
}
}
3. 使用校验包增强
添加 json_schema 依赖:
dependencies:
json_schema: ^2.2.0
示例用法:
import 'package:json_schema/json_schema.dart';
void validateUser(Map<String, dynamic> json) async {
final schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer", "minimum": 0}
}
};
final validator = await JsonSchema.createSchema(schema);
final errors = validator.validate(json);
if (errors.isNotEmpty) throw FormatException(errors.join(', '));
}
步骤总结:
- 用工具将 JSON Schema 转为 Dart 类结构
- 通过
json_serializable生成序列化代码 - 结合
json_schema包或自定义方法实现数据验证
此方案在保持类型安全的同时,实现了类似 JSON Schema 的验证能力。

