当前位置 博文首页 > 文章内容

    浅谈Flutter解析JSON三种方式

    作者:shunshunshun18 栏目:未分类 时间:2021-03-30 14:43:55

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Dart实体类格式

    class CategoryMo {
     String name;
     int count;
    
     CategoryMo({this.name, this.count});
     //将map转成mo
     CategoryMo.fromJson(Map<String, dynamic> json) {
     name = json['name'];
     count = json['count'];
     }
     //将mo转成map,可缺省
     Map<String, dynamic> toJson() {
     final Map<String, dynamic> data = new Map<String, dynamic>();
     data['name'] = this.name;
     data['count'] = this.count;
     return data;
     }
    }
    
    

    方案一:手写实体类

    person.json

    {
     "name": "Jack",
     "age": 20
    }
    
    

    model转换与使用

    var personMap = {
     "name": "Jack",
     "age": 20
    };
    Person person = Person.fromJson(personMap);
    print('name:${person.name}');
    print('age:${person.age}');
    
    

    方案二:生产力工具:json-to-dart插件自动生成实体类

    方案三:生产力工具: json_ serializable使用技巧

    安装插件

    dependencies:
    ...
     dio: ^3.0.10
     json_annotation: ^3.1.0
    
    
    dev_dependencies:
    ...
     json_serializable: ^3.5.0
     build_runner: ^1.0.0
    
    

    配置实体类

    {
     "code": 0,
     "method": "GET",
     "requestPrams": "dd"
    }
    
    import 'package:json_annotation/json_annotation.dart';
    
    // result.g.dart 将在我们运行生成命令后自动生成
    part 'result.g.dart';
    
    ///这个标注是告诉生成器,这个类是需要生成Model类的
    @JsonSerializable()
    class Result {
     //定义构造方法
     Result(this.code, this.method, this.requestPrams);
     //定义字段
     int code;
     String method;
     String requestPrams;
    
     //固定格式,不同的类使用不同的mixin即可
     factory Result.fromJson(Map<String, dynamic> json) => _$ResultFromJson(json);
     //固定格式
     Map<String, dynamic> toJson() => _$ResultToJson(this);
    }
    
    

    因为实体类的生成代码还不存在,所以上代码会提示一-些错误是正常现象

    执行build生成实体类

    flutter packages pub run build_runner build
    

    如何选择