Dart接收json数据后,怎么调用

举报
luichun 发表于 2022/07/27 17:46:01 2022/07/27
【摘要】 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个模型来接收处理数据


dart接收json数据后如何调用.drawio.png

测试代码如下

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。