Dart接收json数据后,怎么调用
        【摘要】 1:接收到json数据,转换为Map类型2:创建模型来处理数据下面的例子中有2层,所以创建了2个模型来接收处理数据测试代码如下void main() {  var aMap = {    "key1": "值1",    "key2": 2222,    "key3": "值3",    "key4": [      {"k4_1": "数字1", "k4_2": 41},      {"k...
    
    
    
    1:接收到json数据,转换为Map类型
2:创建模型来处理数据
下面的例子中有2层,所以创建了2个模型来接收处理数据

测试代码如下
  void main() {
 
 
 
    var aMap = {
 
 
 
      "key1": "值1",
 
 
 
      "key2": 2222,
 
 
 
      "key3": "值3",
 
 
 
      "key4": [
 
 
 
        {"k4_1": "数字1", "k4_2": 41},
 
 
 
        {"k4_1": "数字2", "k4_2": 42}
 
 
 
      ]
 
 
 
    };
 
 
 
    //从后端获取到的数据是json数据格式
 
 
 
    //其他人叫json的键值对,我叫它为项值,
 
 
 
    //key=项
 
 
 
    //value=值
 
 
 
    //需要把json转换为dart中的Map类型数据,转化后的数据如上面
 
 
 
    //
 
 
 
    //获取到第一层的第4个项的值,赋值给key4BL变量
 
 
 
    //把key4BL转为一个列表类型,并且遍历每个元素,然后通过每个元素执行一次【print(element["dkey"])】
 
 
 
    // var key4BL = aMap["key4"];
 
 
 
    // (key4BL as List).forEach((element) {
 
 
 
    //   print(element["key4"]);
 
 
 
    // });
 
 
 
    //
 
 
 
    //
 
 
 
    //使用
 
 
 
    //使用上面的aMap变量,和定义好的模型class JieShou()  来创建对象
 
 
 
    var obj = JieShou.fromJson(aMap);
 
 
 
    //使用测试
 
 
 
    print(obj.key1); //值1
 
 
 
    print(obj.key2); //2222
 
 
 
    print(obj.key3); //值3
 
 
 
    print(obj.key4); //[Instance of 'Key4', Instance of 'Key4']
 
 
 
    var liebiao = obj.key4;
 
 
 
    // liebiao.map((e) => null)
 
 
 
    //需要不为空
 
 
 
    liebiao!.map((e) => {print(e.k4_1)}).toList();
 
 
 
    liebiao.map((e) => {print(e.k4_2)});
 
 
 
  }
 
 
 
  //json数据如上面所示
 
 
 
  //那么再dart中  可以创建类来接收
 
 
 
  class JieShou {
 
 
 
    //上面的json数据,第一层有4项,对应有4个值,这里创建4个变量来接收值
 
 
 
    //因为不同的值的类型不一样,定义变量值类型需要区分
 
 
 
    String? key1;
 
 
 
    int? key2;
 
 
 
    String? key3;
 
 
 
    List<Key4>? key4;
 
 
 
    //下面另外定义了Key4的class 模型
 
 
 
    //构造函数传递变量,本个类定义的变量
 
 
 
    JieShou({this.key1, this.key2, this.key3, this.key4});
 
 
 
    //(Map<String, dynamic> json)
 
 
 
    //其他人叫json的键值对,我叫它为项值,
 
 
 
    //key=项
 
 
 
    //value=值
 
 
 
    //第一层项,都是字符串类型--所以定义为String类型
 
 
 
    //第一层值,有字符串类型,有数值类型,也有列表类型,所以定义为dynamic类型[任意类型]
 
 
 
    //formJson()方法
 
 
 
    //定义参数json 的类型
 
 
 
    //使用String 类型接收 项 "key1","key2","key3","key4"
 
 
 
    //使用dynamic类型接收 值 "aa1", 2222,"cccc3",[{"dkey": "数字1", "k4_1": 1},{"dkey": "数字2", "k4_1": 2}]
 
 
 
    JieShou.fromJson(Map<String, dynamic> json) {
 
 
 
      key1 = json['key1'];
 
 
 
      key2 = json['key2'];
 
 
 
      key3 = json['key3'];
 
 
 
      //上面定义了变量key4 的Key4模型 列表类型,并且允许为空,所以进行判断是否为空
 
 
 
      if (json['key4'] != null) {
 
 
 
        //第四个项的值是一个列表类型
 
 
 
        //判断如果key4中的值 不是空 就执行
 
 
 
        key4 = <Key4>[];
 
 
 
        //先创建key4变量,并且定义好数据类型为<Key4>[];
 
 
 
        // json["key4"].forEach((){});调用失败
 
 
 
        // json["key4"]它并不是纯List类型,
 
 
 
        //                 而是Map中的List,所以会提示 null null
 
 
 
        // 想要使用forEach()方法,需要纯List类型
 
 
 
        // (json['key4'] as List)转换为列表
 
 
 
        // (json['key4'] as List).forEach((e){});
 
 
 
        (json['key4'] as List).forEach((e) {
 
 
 
          key4!.add(Key4.fromJson(e));
 
 
 
          //key4使用!断言,说明它不是空
 
 
 
        });
 
 
 
      }
 
 
 
    }
 
 
 
    //上面使用了JieShou这个 类,并且有4个属性  [key1,key2,key3,key4]
 
 
 
    //可以定义一个变量 jj,类型定义为JieShou
 
 
 
    // JieShou jj;
 
 
 
    // 然后通过变量jj的来访问属性
 
 
 
    //jj.key1
 
 
 
    //jj.key2
 
 
 
    //jj.key3
 
 
 
    //jj.key4
 
 
 
  }
 
 
 
  class Key4 {
 
 
 
    //[{"k4_1": "数字1", "k4_2": 1},{"k4_1": "数字2", "k4_2": 2}]
 
 
 
    // 如上行中的的数据
 
 
 
    String? k4_1; //存储 "数字1"  "数字2"
 
 
 
    int? k4_2; //存储 1  2
 
 
 
    //构造函数传递变量,本个类定义的变量
 
 
 
    Key4({this.k4_1, this.k4_2});
 
 
 
    //
 
 
 
    Key4.fromJson(Map<String, dynamic> json) {
 
 
 
      k4_1 = json['k4_1'];
 
 
 
      k4_2 = json['k4_2'];
 
 
 
    }
 
 
 
  }
 
 
 
  //==========================================================
 
 
 
  //从嵌套的json中创建一个模型
 
 
 
            【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)