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": "2c9f6c94679b4fb10167f7de126815d7", "mallCategoryId": "4", "mallSubName": "竹葉青", "comments": null }], "comments": null, }

 

模型層的建立

把模型層單獨放到一個文件夾里,然后建立一個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() ); } }

這樣就建立好了一個模型,其實這個模型還可以繼續建立,以后的課程中也會逐漸深入。這里到這里,相信大家都掌握了建立模型的方法。

廣州品牌設計公司https://www.houdianzi.com

數據模型的使用

使用數據模型就簡單很多了。直接聲明變量,調用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,都是先操作一下,然后再改的。算是一個小竅門吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM