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)最好确定文件名后再执行命令,不然重命名可能会发生很难解决的事情
     
     
  • 相关阅读:
    js中的true和false
    js对象
    javascript性能
    js中数组的操作
    hadoop入门手册1:hadoop【2.7.1】【多节点】集群配置【必知配置知识1】
    hadoop2.7【单节点】单机、伪分布、分布式安装指导
    hadoop2.2使用手册2:如何运行自带wordcount
    hadoop2.x常用端口、定义方法及默认端口、hadoop1.X端口对比
    hadoop2.X使用手册1:通过web端口查看主节点、slave1节点及集群运行状态
    hadoop(2.x)以hadoop2.2为例完全分布式最新高可靠安装文档
  • 原文地址:https://www.cnblogs.com/Rombo713/p/11983291.html
Copyright © 2011-2022 走看看