zoukankan      html  css  js  c++  java
  • Flutter实体与JSON解析的一种方法

    vs code作为编辑器

    1. 首先,json对象与字符串的转换是使用json.encode和json.decode的,需要导入import 'dart:convert';

     这里主要的自然不是这个,而是json对象和实体对象的转换

      当然,实际上json对象算是一个Map对象,直接通过键访问就可以得到值,即通过实体对象的属性名就可以得到值。
      这里只是把这一步通过命令生成而已

    2. 导入对应的flutter包

    即在pubspec.yaml中添加

    dependencies:
      json_annotation: ^3.0.0
    dev_dependencies:
      build_runner: ^1.0.0
      json_serializable: ^3.2.0
    保存将自动加载,或者终端输入flutter packages get,亦或者vs code中点击“查看-命令面板”再输入Flutterget就会出现
     
    3. 创建实体的dart文件,下面以news为例 —— 可以用https://caijinglong.github.io/json2dart/index_ch.html生成
    import 'package:json_annotation/json_annotation.dart';//注意必须导入,不然无法使用@JsonSerializable()

    part "news.g.dart";//严格区分大小写,且必须是文件名中间加上g.,否则无法成功。另外也是必须的,因为要生成一个转换部分文件

    @JsonSerializable()//注意加上,后面命令识别用
    class News extends Object {
      final String author;
      final String title;
      final String description;
      final String url;
      final String urlToImage;
      final String publishedAt;
      final Source source;

      News(this.author,
          this.title,
          this.description,
          this.url,
          this.urlToImage,
          this.publishedAt,
          this.source);
    }
     
    4. 终端输入命令flutter packages pub run build_runner build
    等到成功,每个json序列化都将会有一个输出

     这样就生成好了一个转换类news.g.dart,此时转换文件中有_$NewsFromJson方法

    你会发现竟然是报错的??那是因为你主类中缺少了命名式构造函数,加上即可

    factory News.fromJson(Map<String, dynamic> json) => _$NewsFromJson(json);
    5. 这样,你就可以通过命名构造函数从json对象转换为实体对象了
    6. 当然还要说说缺陷和坑:
      1)泛型无法成功
      2)最好确定文件名后再执行命令,不然重命名可能会发生很难解决的事情
     
     
  • 相关阅读:
    程序员生存定律--成长路上常见的坑
    程序员生存定律--升华成高手的可能方法
    程序员生存定律--如何尽快变的稍微专业一点
    程序员生存定律--编程的起点与可能的失足
    一段旅程的结束和另一端旅程的开始
    Cesium教程系列汇总
    数据可视化之总结
    可视化之Earth NullSchool
    可视化之AQICN
    可视化之Berkeley Earth
  • 原文地址:https://www.cnblogs.com/Rombo713/p/11983291.html
Copyright © 2011-2022 走看看