Flutter JSON解析與復(fù)雜模型轉(zhuǎn)換技巧

Flutter JSON解析與復(fù)雜模型轉(zhuǎn)換技巧

其實(shí)轉(zhuǎn)換成model類是有好處的鸟款,轉(zhuǎn)換后可以減少上線后APP崩潰和出現(xiàn)異常,所以我們從這節(jié)課開始茂卦,要制作model類模型何什,然后用model的形式編輯UI界面。

類別json的分析

比如現(xiàn)在從后臺(tái)得到了一串JSON數(shù)據(jù):

{"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,}

模型層的建立

把模型層單獨(dú)放到一個(gè)文件夾里等龙,然后建立一個(gè)category.dart文件处渣。這個(gè)文件就是要結(jié)合json文件,形成的modle文件蛛砰。文件里大量使用了dart中的 factory語法罐栈。

工廠構(gòu)造函數(shù)

factory 關(guān)鍵字的功能,當(dāng)實(shí)現(xiàn)構(gòu)造函數(shù)但是不想每次都創(chuàng)建該類的一個(gè)實(shí)例的時(shí)候使用泥畅。

工廠模式是我們最常用的實(shí)例化對(duì)象模式了荠诬,是用工廠方法代替new操作的一種模式。用簡單明了的方式解釋,模式上類似于面向?qū)ο蟮亩鄳B(tài)柑贞,用起來和靜態(tài)方法差不多方椎。高雅和低俗的結(jié)合,相當(dāng)于聽著貝多芬的交響樂《命運(yùn)》钧嘶,看著波多野結(jié)衣的島國小電影棠众,只要你爽,什么都可以有决。

我們先制作了一個(gè)大分類的Class,代碼如下:

classCategoryBigModel{StringmallCategoryId;//類別IDStringmallCategoryName;//類型名稱List bxMallSubDto;//子類? dynamic動(dòng)態(tài)的Null comments;//描述Stringimage;//圖片//構(gòu)造函數(shù)CategoryBigModel({this.mallCategoryId,this.mallCategoryName,this.bxMallSubDto,this.comments,this.image? });//工廠模式-用這種模式可以省略New關(guān)鍵字factory CategoryBigModel.fromJson(dynamic json){returnCategoryBigModel(? ? ? mallCategoryId: json[‘mallCategoryId‘],mallCategoryName:json[‘mallCategoryName‘],bxMallSubDto:json[‘bxMallSubDto‘],comments:json[‘comments‘],image:json[‘image‘],? ? );? }}

這個(gè)只是單個(gè)的一個(gè)大類信息的模型摄欲,但我們是一個(gè)列表,這時(shí)候就需要制作一個(gè)列表的模型疮薇,而這個(gè)List里邊是我們定義的CategoryBigModel模型胸墙。簡單理解就是先定義一個(gè)單項(xiàng)模型,然后再定義個(gè)列表的模型按咒。

classCategoryBigListModel{List data;? CategoryBigListModel(this.data);? factory CategoryBigListModel.formJson(Listjson){returnCategoryBigListModel(? ? ? json.map((i)=>CategoryBigModel.fromJson((i))).toList()? ? );? }? }

這樣就建立好了一個(gè)模型迟隅,其實(shí)這個(gè)模型還可以繼續(xù)建立,以后的課程中也會(huì)逐漸深入励七。這里到這里智袭,相信大家都掌握了建立模型的方法。

數(shù)據(jù)模型的使用

使用數(shù)據(jù)模型就簡單很多了掠抬。直接聲明變量吼野,調(diào)用formJson方法就可以了。直接在_getCategory()方法里两波。記得先引入數(shù)據(jù)模型類瞳步,然后用.的形式進(jìn)行輸出了。

import‘../model/category.dart‘;void_getCategory()async{awaitrequest(‘post‘, ‘getCategory‘).then((val){vardata = json.decode(val.toString());//print(data);CategoryBigListModel list = CategoryBigListModel.formJson(data[‘data‘]);? ? ? list.data.forEach((item) =>print(item.mallCategoryName));? ? });}

寫完這些腰奋,你就可以在控制臺(tái)看到結(jié)果了单起。如果是第一次接觸數(shù)據(jù)模型,可能還是稍微有些繞的劣坊。

json_to_dart的使用

如果我們得到一個(gè)特別復(fù)雜的JSON,有時(shí)候會(huì)無從下手開始寫Model,這時(shí)候就可以使用一些輔助工具嘀倒。我認(rèn)為json_to_dart是比較好用的一個(gè)。它可以直接把json轉(zhuǎn)換成dart類局冰,然后進(jìn)行一定的修改测蘑,就可以快樂的使用了。工作中我拿到一個(gè)json康二,都是先操作一下碳胳,然后再改的。算是一個(gè)小竅門吧赠摇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末固逗,一起剝皮案震驚了整個(gè)濱河市浅蚪,隨后出現(xiàn)的幾起案子藕帜,更是在濱河造成了極大的恐慌烫罩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洽故,死亡現(xiàn)場離奇詭異贝攒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)时甚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門隘弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荒适,你說我怎么就攤上這事梨熙。” “怎么了刀诬?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵咽扇,是天一觀的道長。 經(jīng)常有香客問我陕壹,道長质欲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任糠馆,我火速辦了婚禮嘶伟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘又碌。我一直安慰自己九昧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布毕匀。 她就那樣靜靜地躺著耽装,像睡著了一般。 火紅的嫁衣襯著肌膚如雪期揪。 梳的紋絲不亂的頭發(fā)上掉奄,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音凤薛,去河邊找鬼姓建。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缤苫,可吹牛的內(nèi)容都是我干的速兔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼活玲,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼涣狗!你這毒婦竟也來了谍婉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤镀钓,失蹤者是張志新(化名)和其女友劉穎穗熬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丁溅,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唤蔗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窟赏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妓柜。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涯穷,靈堂內(nèi)的尸體忽然破棺而出棍掐,到底是詐尸還是另有隱情,我是刑警寧澤拷况,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布作煌,位于F島的核電站,受9級(jí)特大地震影響蝠嘉,放射性物質(zhì)發(fā)生泄漏最疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一蚤告、第九天 我趴在偏房一處隱蔽的房頂上張望努酸。 院中可真熱鬧,春花似錦杜恰、人聲如沸获诈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舔涎。三九已至,卻和暖如春逗爹,著一層夾襖步出監(jiān)牢的瞬間亡嫌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工掘而, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挟冠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓袍睡,卻偏偏與公主長得像知染,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斑胜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355