flutter Json自动反序列化及json_model

官方的自动反序列化方法


Flutter Json自动反序列化——json_serializable v1.5.1

第三方自动生成工具json_model及修改版


一行命令,将 JSON 文件转成 Dart 类
我用了这个上面这个文章的json_model来自动生成Dart类,但是原版的类命名只是把文件名的首字母大写,所以不能很好的处理文件名为下划线的情况,比如:
json文件名:user_data.json,生成的dart类为:User_data,这样不符合dart的命名规范,正确的类名应该是:UserData
我自己fork修改了一下,支持转换类名为大驼峰,并且将依赖packages也更新到当前最新版本。
我修改的版本在:https://github.com/wbtvc/json_model.git

安装


修改pubspec.yaml :

dev_dependencies:
  json_model:
    git: 
      url: "https://github.com/wbtvc/json_model.git"
  build_runner: ^1.6.0
  json_serializable: ^3.0.0 

使用


新建目录:jsons,把json文件放在此目录下。
运行:

flutter packages pub run json_model

第一次可能会失败出现下面错误:

Failed to precompile json_model:build_runner:
Dart_LoadScriptFromKernel: The binary program does not contain 'main'.
pub finished with exit code 1

此时只要再执行一次就可以了。

生成的dart类存储在"lib/models"下面,使用时引用该目录的index.dart即可。

嵌套类的使用方法


users_data.json:

{
    "count":2,
    "errCode": 0,
    "errMsg": "ok",
    "users":"$[]UserInfo|user_info"
}

user_info.json

{
    "name": "abc",
    "age": 18
}

以上json文件经过转换自动生成2个类:

class UsersData {
    UsersData();

    num count;
    num errCode;
    String errMsg;
    List<UserInfo> users;
    
    factory UsersData.fromJson(Map<String,dynamic> json) => _$UsersDataFromJson(json);
    Map<String, dynamic> toJson() => _$UsersDataToJson(this);
}
class UserInfo {
    SoulContentInfoResp();

    String name;
    num age;
    
    factory UserInfo.fromJson(Map<String,dynamic> json) => _$UserInfoFromJson(json);
    Map<String, dynamic> toJson() => _$UserInfoToJson(this);
}

而且生成的文件名也是跟json文件命名保持一致,全小写加下划线:
users_data.dartuser_info.dart
特别说明:
我的修改版与原版json_model的不同:

 "users":"$[]UserInfo|user_info"

这里前面UserInfo表示类名,"|"符号隔开的user_info是生成的dart类的文件名,用于UsersData类中添加import "user_info.dart"。内置对象比如String就不用这么麻烦,直接写"$[]String"$String就可以了。
原版的没有"|"符号及之后的文件名,这样生成的文件名很不规范。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容