Flutter JSON解析与复杂模型转换技巧

其实转换成model类是有好处的,转换后可以减少上线后APP崩溃和出现异常,所以我们从这节课开始,要制作model类模型,然后用model的形式编辑UI界面。

类别json的分析

比如现在从后台得到了一串JSON数据:

{
    "code": "0",
    "message": "success",
    "data": [{
        "mallCategoryId": "4",
        "mallCategoryName": "白酒",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c94621970a801626a35cb4d0175",
            "mallCategoryId": "4",
            "mallSubName": "名酒",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94621970a801626a363e5a0176",
            "mallCategoryId": "4",
            "mallSubName": "宝丰",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94621970a801626a3770620177",
            "mallCategoryId": "4",
            "mallSubName": "北京二锅头",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cc035c15a8",
            "mallCategoryId": "4",
            "mallSubName": "大明",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cc2af915a9",
            "mallCategoryId": "4",
            "mallSubName": "杜康",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cc535115aa",
            "mallCategoryId": "4",
            "mallSubName": "顿丘",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cc77b215ab",
            "mallCategoryId": "4",
            "mallSubName": "汾酒",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cca72e15ac",
            "mallCategoryId": "4",
            "mallSubName": "枫林",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cccae215ad",
            "mallCategoryId": "4",
            "mallSubName": "高粱酒",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ccf0d915ae",
            "mallCategoryId": "4",
            "mallSubName": "古井",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cd1d6715af",
            "mallCategoryId": "4",
            "mallSubName": "贵州大曲",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cd3f2815b0",
            "mallCategoryId": "4",
            "mallSubName": "国池",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cd5d3015b1",
            "mallCategoryId": "4",
            "mallSubName": "国窖",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cd7ced15b2",
            "mallCategoryId": "4",
            "mallSubName": "国台",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cd9b9015b3",
            "mallCategoryId": "4",
            "mallSubName": "汉酱",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cdbfd215b4",
            "mallCategoryId": "4",
            "mallSubName": "红星",
            "comments": null
        }, {
            "mallSubId": "2c9f6c946891d16801689474e2a70081",
            "mallCategoryId": "4",
            "mallSubName": "怀庄",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cdddf815b5",
            "mallCategoryId": "4",
            "mallSubName": "剑南春",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cdfd4815b6",
            "mallCategoryId": "4",
            "mallSubName": "江小白",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb1016802277c37160e",
            "mallCategoryId": "4",
            "mallSubName": "金沙",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ce207015b7",
            "mallCategoryId": "4",
            "mallSubName": "京宫",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ce46d415b8",
            "mallCategoryId": "4",
            "mallSubName": "酒鬼",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb101680226de23160d",
            "mallCategoryId": "4",
            "mallSubName": "口子窖",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ce705515b9",
            "mallCategoryId": "4",
            "mallSubName": "郎酒",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ce989e15ba",
            "mallCategoryId": "4",
            "mallSubName": "老口子",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cec30915bb",
            "mallCategoryId": "4",
            "mallSubName": "龙江家园",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cef15c15bc",
            "mallCategoryId": "4",
            "mallSubName": "泸州",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cf156f15bd",
            "mallCategoryId": "4",
            "mallSubName": "鹿邑大曲",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cf425b15be",
            "mallCategoryId": "4",
            "mallSubName": "毛铺",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cf9dc915c0",
            "mallCategoryId": "4",
            "mallSubName": "绵竹",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cfbf1c15c1",
            "mallCategoryId": "4",
            "mallSubName": "难得糊涂",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cfdd7215c2",
            "mallCategoryId": "4",
            "mallSubName": "牛二爷",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7cf71e715bf",
            "mallCategoryId": "4",
            "mallSubName": "茅台",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7d7eda715c3",
            "mallCategoryId": "4",
            "mallSubName": "绵竹",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7d96e5c15c4",
            "mallCategoryId": "4",
            "mallSubName": "难得糊涂",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dab93b15c5",
            "mallCategoryId": "4",
            "mallSubName": "牛二爷",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dae16415c6",
            "mallCategoryId": "4",
            "mallSubName": "牛栏山",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7db11cb15c7",
            "mallCategoryId": "4",
            "mallSubName": "前门",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7db430c15c8",
            "mallCategoryId": "4",
            "mallSubName": "全兴",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7db6cac15c9",
            "mallCategoryId": "4",
            "mallSubName": "舍得",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7db9a4415ca",
            "mallCategoryId": "4",
            "mallSubName": "双沟",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dc30b815cb",
            "mallCategoryId": "4",
            "mallSubName": "水井坊",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dc543e15cc",
            "mallCategoryId": "4",
            "mallSubName": "四特",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dc765c15cd",
            "mallCategoryId": "4",
            "mallSubName": "潭酒",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dc988a15ce",
            "mallCategoryId": "4",
            "mallSubName": "沱牌",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dcba5a15cf",
            "mallCategoryId": "4",
            "mallSubName": "五粮液",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dcd9e815d0",
            "mallCategoryId": "4",
            "mallSubName": "西凤",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dcf6d715d1",
            "mallCategoryId": "4",
            "mallSubName": "习酒",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dd11b215d2",
            "mallCategoryId": "4",
            "mallSubName": "小白杨",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dd2f3c15d3",
            "mallCategoryId": "4",
            "mallSubName": "洋河",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7dd969115d4",
            "mallCategoryId": "4",
            "mallSubName": "伊力特",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ddb16c15d5",
            "mallCategoryId": "4",
            "mallSubName": "张弓",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7ddd6c715d6",
            "mallCategoryId": "4",
            "mallSubName": "中粮",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7de126815d7",
            "mallCategoryId": "4",
            "mallSubName": "竹叶青",
            "comments": null
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170036_4477.png"
    }, {
        "mallCategoryId": "1",
        "mallCategoryName": "啤酒",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946016ea9b016016f79c8e0000",
            "mallCategoryId": "1",
            "mallSubName": "百威",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94608ff843016095163b8c0177",
            "mallCategoryId": "1",
            "mallSubName": "福佳",
            "comments": ""
        }, {
            "mallSubId": "402880e86016d1b5016016db9b290001",
            "mallCategoryId": "1",
            "mallSubName": "哈尔滨",
            "comments": ""
        }, {
            "mallSubId": "402880e86016d1b5016016dbff2f0002",
            "mallCategoryId": "1",
            "mallSubName": "汉德",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647cd6830e0022",
            "mallCategoryId": "1",
            "mallSubName": "崂山",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647cd706a60023",
            "mallCategoryId": "1",
            "mallSubName": "林德曼",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e1411b15d8",
            "mallCategoryId": "1",
            "mallSubName": "青岛",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e1647215d9",
            "mallCategoryId": "1",
            "mallSubName": "三得利",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e182e715da",
            "mallCategoryId": "1",
            "mallSubName": "乌苏",
            "comments": null
        }, {
            "mallSubId": "2c9f6c9468118c9c016811ab16bf0001",
            "mallCategoryId": "1",
            "mallSubName": "雪花",
            "comments": null
        }, {
            "mallSubId": "2c9f6c9468118c9c016811aa6f440000",
            "mallCategoryId": "1",
            "mallSubName": "燕京",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e19b8f15db",
            "mallCategoryId": "1",
            "mallSubName": "智美",
            "comments": null
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170044_9165.png"
    }, {
        "mallCategoryId": "2",
        "mallCategoryName": "葡萄酒",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c9460337d540160337fefd60000",
            "mallCategoryId": "2",
            "mallSubName": "澳大利亚",
            "comments": ""
        }, {
            "mallSubId": "402880e86016d1b5016016e083f10010",
            "mallCategoryId": "2",
            "mallSubName": "德国",
            "comments": ""
        }, {
            "mallSubId": "402880e86016d1b5016016df1f92000c",
            "mallCategoryId": "2",
            "mallSubName": "法国",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94621970a801626a40feac0178",
            "mallCategoryId": "2",
            "mallSubName": "南非",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e5c9a115dc",
            "mallCategoryId": "2",
            "mallSubName": "葡萄牙",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e5e68f15dd",
            "mallCategoryId": "2",
            "mallSubName": "西班牙",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e609f515de",
            "mallCategoryId": "2",
            "mallSubName": "新西兰",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e6286a15df",
            "mallCategoryId": "2",
            "mallSubName": "意大利",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e6486615e0",
            "mallCategoryId": "2",
            "mallSubName": "智利",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7e66c6815e1",
            "mallCategoryId": "2",
            "mallSubName": "中国",
            "comments": null
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170053_878.png"
    }, {
        "mallCategoryId": "3",
        "mallCategoryName": "清酒洋酒",
        "bxMallSubDto": [{
            "mallSubId": "402880e86016d1b5016016e135440011",
            "mallCategoryId": "3",
            "mallSubName": "清酒",
            "comments": ""
        }, {
            "mallSubId": "402880e86016d1b5016016e171cc0012",
            "mallCategoryId": "3",
            "mallSubName": "洋酒",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170101_6957.png"
    }, {
        "mallCategoryId": "5",
        "mallCategoryName": "保健酒",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c94609a62be0160a02d1dc20021",
            "mallCategoryId": "5",
            "mallSubName": "黄酒",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94648837980164883ff6980000",
            "mallCategoryId": "5",
            "mallSubName": "药酒",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170110_6581.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647ccd76a6001b",
        "mallCategoryName": "预调酒",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647d02f6250026",
            "mallCategoryId": "2c9f6c946449ea7e01647ccd76a6001b",
            "mallSubName": "果酒",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d031bae0027",
            "mallCategoryId": "2c9f6c946449ea7e01647ccd76a6001b",
            "mallSubName": "鸡尾酒",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d03428f0028",
            "mallCategoryId": "2c9f6c946449ea7e01647ccd76a6001b",
            "mallSubName": "米酒",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170124_4760.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647ccf3b97001d",
        "mallCategoryName": "下酒小菜",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647dc18e610035",
            "mallCategoryId": "2c9f6c946449ea7e01647ccf3b97001d",
            "mallSubName": "熟食",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dc1d9070036",
            "mallCategoryId": "2c9f6c946449ea7e01647ccf3b97001d",
            "mallSubName": "火腿",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dc1fc3e0037",
            "mallCategoryId": "2c9f6c946449ea7e01647ccf3b97001d",
            "mallSubName": "速冻食品",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170133_4419.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
        "mallCategoryName": "饮料",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647d09cbf6002d",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "茶饮",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d09f7e8002e",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "水饮",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d0a27e1002f",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "功能饮料",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d0b1d4d0030",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "果汁",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d14192b0031",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "含乳饮料",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647d24d9600032",
            "mallCategoryId": "2c9f6c946449ea7e01647ccdb0e0001c",
            "mallSubName": "碳酸饮料",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170143_361.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647cd108b60020",
        "mallCategoryName": "乳制品",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647dd4ac8c0048",
            "mallCategoryId": "2c9f6c946449ea7e01647cd108b60020",
            "mallSubName": "常温纯奶",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd4f6a40049",
            "mallCategoryId": "2c9f6c946449ea7e01647cd108b60020",
            "mallSubName": "常温酸奶",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd51ab7004a",
            "mallCategoryId": "2c9f6c946449ea7e01647cd108b60020",
            "mallSubName": "低温奶",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170151_9234.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
        "mallCategoryName": "休闲零食",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647dc51d93003c",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "方便食品",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd204dc0040",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "面包糕点",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd22f760041",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "糖果巧克力",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd254530042",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "膨化食品",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7fa132b15e7",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "坚果炒货",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7f4bfc415e2",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "肉干豆干",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7f5027a15e3",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "饼干",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94679b4fb10167f7f530fd15e4",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "冲调",
            "comments": null
        }, {
            "mallSubId": "2c9f6c94683a6b0d016846b49436003b",
            "mallCategoryId": "2c9f6c946449ea7e01647ccfddb3001e",
            "mallSubName": "休闲水果",
            "comments": null
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190131/20190131170200_7553.png"
    }, {
        "mallCategoryId": "2c9f6c946449ea7e01647cd08369001f",
        "mallCategoryName": "粮油调味",
        "bxMallSubDto": [{
            "mallSubId": "2c9f6c946449ea7e01647dd2e8270043",
            "mallCategoryId": "2c9f6c946449ea7e01647cd08369001f",
            "mallSubName": "油/粮食",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd31bca0044",
            "mallCategoryId": "2c9f6c946449ea7e01647cd08369001f",
            "mallSubName": "调味品",
            "comments": ""
        }, {
            "mallSubId": "2c9f6c946449ea7e01647dd35a980045",
            "mallCategoryId": "2c9f6c946449ea7e01647cd08369001f",
            "mallSubName": "酱菜罐头",
            "comments": ""
        }],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20181212/20181212115842_9733.png"
    }, {
        "mallCategoryId": "2c9f6c9468a85aef016925444ddb271b",
        "mallCategoryName": "积分商品",
        "bxMallSubDto": [],
        "comments": null,
        "image": "http://images.baixingliangfan.cn/firstCategoryPicture/20190225/20190225232703_9950.png"
    }]
}

模型层的建立

把模型层单独放到一个文件夹里,然后建立一个category.dart文件。这个文件就是要结合json文件,形成的modle文件。文件里大量使用了dart中的 factory语法。

工厂构造函数

factory 关键字的功能,当实现构造函数但是不想每次都创建该类的一个实例的时候使用。

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。用简单明了的方式解释,模式上类似于面向对象的多态,用起来和静态方法差不多。高雅和低俗的结合,相当于听着贝多芬的交响乐《命运》,看着波多野结衣的岛国小电影,只要你爽,什么都可以。

我们先制作了一个大分类的Class,代码如下:

class CategoryBigModel{
  String mallCategoryId; //类别ID
  String mallCategoryName; //类型名称
  List<dynamic> bxMallSubDto; //子类  dynamic动态的
  Null comments; //描述
  String image; //图片
  //构造函数
  CategoryBigModel({
    this.mallCategoryId, this.mallCategoryName, this.bxMallSubDto, this.comments, this.image
  });

  //工厂模式-用这种模式可以省略New关键字
  factory CategoryBigModel.fromJson(dynamic json){
    return CategoryBigModel(
      mallCategoryId: json[‘mallCategoryId‘],
      mallCategoryName:json[‘mallCategoryName‘],
      bxMallSubDto:json[‘bxMallSubDto‘],
      comments:json[‘comments‘],
      image:json[‘image‘],
    );
  }

}

这个只是单个的一个大类信息的模型,但我们是一个列表,这时候就需要制作一个列表的模型,而这个List里边是我们定义的CategoryBigModel模型。简单理解就是先定义一个单项模型,然后再定义个列表的模型。

class CategoryBigListModel {

  List<CategoryBigModel> data;
  CategoryBigListModel(this.data);
  factory CategoryBigListModel.formJson(List json){
    return CategoryBigListModel(
      json.map((i)=>CategoryBigModel.fromJson((i))).toList()
    );
  }

}

这样就建立好了一个模型,其实这个模型还可以继续建立,以后的课程中也会逐渐深入。这里到这里,相信大家都掌握了建立模型的方法。

数据模型的使用

使用数据模型就简单很多了。直接声明变量,调用formJson方法就可以了。直接在_getCategory()方法里。记得先引入数据模型类,然后用.的形式进行输出了。

import ‘../model/category.dart‘;
void _getCategory() async{

    await request(‘post‘, ‘getCategory‘).then((val){
      var data = json.decode(val.toString());
      //print(data);
      CategoryBigListModel list = CategoryBigListModel.formJson(data[‘data‘]);
      list.data.forEach((item) => print(item.mallCategoryName));
    });
  }

写完这些,你就可以在控制台看到结果了。如果是第一次接触数据模型,可能还是稍微有些绕的。

json_to_dart的使用

如果我们得到一个特别复杂的JSON,有时候会无从下手开始写Model,这时候就可以使用一些辅助工具。我认为json_to_dart是比较好用的一个。它可以直接把json转换成dart类,然后进行一定的修改,就可以快乐的使用了。工作中我拿到一个json,都是先操作一下,然后再改的。算是一个小窍门吧。

地址:https://javiercbk.github.io/json_to_dart/

原文地址:https://www.cnblogs.com/joe235/p/11633989.html

时间: 2024-11-06 07:32:34

Flutter JSON解析与复杂模型转换技巧的相关文章

6-4 JSON解析与复杂模型转换实用技巧

借助的插件 final类型的用这种方式 集合数据先转List然后 在调用map方法循环,里面每一项 执行了formJson方法,就是每个子项循环转换成了一个实体对象. 改成final之后,就可以通过这种方式来进行调用了. 数据量大的情况下 新建一个test.dart把生成的代码复制过来 然后可以根据需要去修改类名 这样就可以将这样一个负责的json数据转换成dart里面的对象 结束 原文地址:https://www.cnblogs.com/wangjunwei/p/12196107.html

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为&lt;null&gt;无法保存在userDefault的问题

解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault. 打印下得到的字典数据: “username”=<null> 此时如果将字典保存到userDefault中会报错 所以需要遍历字典将其替换 for (NSString*s in [Dict1 allKeys]) { if ([Dict1[s] isEqual:[NSNull null]]) { [Dict1 setObject:@""

flutter json数据解析

在网上看了很多方法,整合了一下比较适合现在使用的.刚刚开始弄flutter,很多东西都不懂,以前也没有做过移动开发,很是懵逼 pubspec.yaml中添加需要的包 #httphttp: ^0.12.0+1 //dio 我在后面没有使用到,但是很多例子有用这个东西,我老是在使用的时候报奇奇怪怪的错,真的愁人# Dart Http请求库dio: ^2.1.0 flutter packages get 一下 使用了json生成工具,JSONFormat4Flutter 在这里可以下载到.使用方法,在

Flutter - 网络请求与 json 解析

Flutter网络请求与JSON解析 Flutter网络请求与JSON解析 网络请求项目中用了两种,一个是 dart 自己的 dart:io, 另外一个是 dio 这个库. json 解析则用的是 dart:convert. 发起 HTTP 请求 首先我们需要先导入 http 的支持包,然后创建 httpClient. import 'dart:io'; var httpClient = new HttpClient(); HttpClient 支持常见的 get.post.put.delete

Java基础知识强化103:JSON解析框架汇总

1.Gson Gson是Google提供的一个能够将Java对象转换成相应JSON表达形式的一个开源Java类库,当然用Gson也能将JSON字符串转换成与之等价的Java对象.Gson对于任何Java对象都有效,包括那些预先存在没有源代码的对象. 现在已经有一些能将Java对象转换成JSON的开源项目了.但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的.并且它们也不支持Java泛型.但是Gson却将这两点作为自己非常重要的设计目标. 目标 使用toJs

JSON解析

2.1 JSON简单介绍 001 问:什么是JSON 答: (1)JSON是一种轻量级的数据格式,一般用于数据交互 (2)服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 002 相关说明 (1)JSON的格式很像OC中的字典和数组 (2)标准JSON格式key必须是双引号 003 JSON解析方案 a.第三方框架 JSONKit\SBJSON\TouchJSON b.苹果原生(NSJSONSerialization) 2.2 JSON解析相关代码 (1)json数据

iOS网络编程开发—JSON解析与XML解析

一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须用双引号 要想从

iOS之JSON解析和视频的简单播放

JSON解析 1 JSON简单介绍 1) 什么是JSON (1)JSON是一种轻量级的数据格式,一般用于数据交互 (2)服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 2) 相关说明 (1)JSON的格式很像OC中的字典和数组 (2)标准JSON格式key必须是双引号 3)JSON解析方案 a.第三方框架  JSONKit\SBJSON\TouchJSON b.苹果原生(NSJSONSerialization)(原生的最常用,也是推荐用的) 2 JSON解析相关代码

&lt;JavaScript语言精粹&gt;JSON解析器源码阅读

1 // 这是一个用JavaScript编写JSON解析器的实现方案: 2 var jsonParser = (function() { 3 // 这是一个能把JSON文本解析成JavaScript数据结构的函数. 4 // 它是一个简单的递归降序解析器. 5 // 我们在另一个函数中定义此函数,以避免创建全局变量. 6 7 var at, // 当前字符索引 8 ch, // 当前字符 9 escapee = { 10 '"': '"', 11 "\\": &qu