Flutter JSON数据模型生成插件json_model的使用
Flutter JSON数据模型生成插件 json_model
的使用
json_model
是一个用于将JSON文件转换为Dart数据模型类的插件。它简化了从JSON到Dart模型的转换过程,并且支持多种配置选项来满足不同的需求。
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dev_dependencies:
json_model: ^1.0.0
json_serializable: ^5.0.0
然后运行 flutter pub get
或 pub get
来安装这些依赖。
使用步骤
- 在项目根目录下创建一个名为
jsons
的目录。 - 将你的JSON文件放入
jsons
目录中。 - 运行命令
flutter packages pub run json_model
(对于Flutter项目)或pub run json_model
(对于Dart VM项目)。生成的Dart模型类默认会放在lib/models
目录下。
核心思想
json_model
的主要思想是只维护JSON文件,而不需要关心生成的Dart文件。只要JSON文件存在,就可以随时通过一条命令重新生成Dart类。这对于多人协作项目尤其有用,可以将其集成到构建流程中,避免每个人都需要手动转换工具。
示例
JSON文件示例 (jsons/user.json
)
{
"name": "wendux",
"father": "$user", // 引用其他model类
"friends": "$[]user", // 引用数组
"keywords": "$[]String", // 字符串数组
"age?": 20 // 可能为null的字段
}
生成的Dart模型类 (lib/models/user.dart
)
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
User();
late String name;
late User father;
late List<User> friends;
late List<String> keywords;
num? age;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
Json标注
你也可以使用 json_annotation
包中的所有注解。例如,如果你有一个字段名包含特殊字符如 +1
,你可以使用 @JsonKey
来映射变量名:
{
"@JsonKey(name: '+1') int?": "loved", // 将“+1”映射为“loved”
"name": "wendux",
"age?": 20
}
生成的Dart文件如下:
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
User();
@JsonKey(name: '+1') int? loved;
late String name;
num? age;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
测试代码:
import 'models/index.dart';
void main() {
var u = User.fromJson({"name": "Jack", "age": 16, "+1": 20});
print(u.loved); // 输出:20
}
$meta
配置
你可以在JSON文件中使用 $meta
来定制生成Dart文件的规则:
{
"@meta": {
"import": [
"test_dir/profile.dart"
],
"comments": {
"name": "名字"
},
"nullable": true,
"ignore": false
},
"@JsonKey(ignore: true) Profile?": "profile",
"@JsonKey(name: '+1') int?": "loved",
"name": "wendux",
"father": "$user",
"friends": "$[]user",
"keywords": "$[]String",
"age?": 20
}
生成的Dart文件如下:
import 'package:json_annotation/json_annotation.dart';
import 'test_dir/profile.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
User();
@JsonKey(ignore: true) Profile? profile;
@JsonKey(name: '+1') int? loved;
// 名字
String? name;
User? father;
List<User>? friends;
List<String>? keywords;
num? age;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
全局命令参数
-
自定义源JSON文件目录:
pub run json_model src=json_files
-
自定义输出目录:
pub run json_model src=json_files dist=data # 输出目录为 lib/data
-
设置生成字段为可空类型:
pub run json_model --nullable
注意:如果JSON文件中的 $meta
配置了 nullable
,则会覆盖全局命令配置。
代码调用
如果你想在工具开发中使用 json_model
,可以通过代码调用来实现:
import 'package:json_model/json_model.dart';
void main() {
run(['src=jsons']); // run方法为json_model暴露的方法;
}
这个简单的教程展示了如何使用 json_model
插件快速生成Dart数据模型类,并提供了一些高级功能和配置选项。希望这对你有所帮助!
更多关于Flutter JSON数据模型生成插件json_model的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html