2023年3月16日 星期四

Flutter學習- 序列化及反序列化

 一、讀取json數據

var a=jsonDecode(這裡放讀出來要轉的資料);  那a就是你可以直接處理的東西..

如果要讀資料,基本就是 a['你的key的名字'] 或是 a[你要讀取的序號]

{ }<=這種引號就是以key的方法讀取.  [ ]<=這種就是讀陣列所在位置,由0開始..

以{"name":[a,b,c]} 當原始資料為例,那轉完以後,存在a這個變數。

 那要讀就是 a['name'] <=這樣可以讀到 [a,b,c] 如果你要再讀下去  a['name'][0] ,這樣就可以讀到 a, 而a['name'][1]這樣可以讀到b

二、序列化及反序列化

如果你要序列化,就是把你現在的資料在一個類裡面。所以要建一個存這些資料的類別。如以User類別為例:class User { },這裡面有幾個屬性,就要建幾個變數...因為你要把每個你讀到的資料都對應進去,以方便用我們習慣讀類屬性的方法用 點 . 的方法讀取。假設你讀的資料有name 和 email。包含每個類下面要有的建構式,如下的寫法:
class User {

final String name; //宣告一個字串類型的name

final String email; //宣告一個字串類型的email


User(this.name, this.email); //建構式

}


序列化方法

fromJson函式裡面的寫法有很有多種,我習慣的寫法如下,這種寫法如果有空值,它會自動存為null,比較不會因為對應不到而報錯。

factory User.fromJson(Map<String, dynamic> json) => User(

    name: json["name"]== null ? null : json["name"],

    email: json["email"]== null ? null : json["emal"],

  );

基本就是將你的json原始資料跟User類相互對應好。如果你有更多的資料,就配合上面的程式,一直增加下去..如要填加一個性別,就是:

 Sex: json["sex"]== null ? null : json["sex"]



反序列化方法

最後是轉回來的方法,要存進資料庫的方法,大致如下,也是以此類推而已。

Map<String, dynamic> toJson() => {

    "name": name == null ? null : name,  //如果資料為null,就空值,沒有就將name值,當value值讀進去。

    "email": email == null ? null : email,

  };


可以直接轉譯的網站:

https://app.quicktype.io/

JSON to Dart (javiercbk.github.io)

沒有留言:

張貼留言