Flutter學習總結(十九、Flutter的Json解析)

Flutter的Json解析

一起從0開始學習Flutter!

Json是我們最常用的數據傳輸格式,我們需要在發送數據的時候將對象轉爲Json,在收到數據後將Json轉爲對象,這需要我們的轉化,我們可以自己手解這些Json字符串,也可以利用一些第三方庫幫我們自動轉化。
手動轉化的我們引入轉化的類庫:

	import 'dart:convert';

引入之後我們就可以直接使用json庫來幫助我們進行json和實體的轉化了。
json解析:

	String jsonStr = '{"username":"flutter","password":"pwd"}';
    Map<String,dynamic> decode = json.decode(jsonStr);//這裏幫助我們將json的字符串轉爲了Map集合
    print("username is ${decode['username']}");//這裏使用Map的讀取方式來獲取username作爲key的值

我們再把上面的decode轉爲json看是否可以:

	String codeStr = json.encode(decode);//直接將需要轉的對象encode就可以了
    print("codeStr is ${codeStr}");//打印已經轉爲json的字符串

這是比較簡單的json解析方式,我們再看下我們在項目中最常用的使用Json轉對象的方法,我們可以在其他的平臺看到有很多的轉化的類庫,我們這裏使用官方提供給我們的json_serializable。
引入第三方的自動轉化庫:

dependencies:
  json_annotation: ^3.0.1
  json_serializable: ^3.3.0

創建一個實體類:

import 'package:json_annotation/json_annotation.dart';//引入第三方的類庫
part 'user.g.dart';//在我們編譯時會自動生成
@JsonSerializable()//這裏告訴編譯器它是一個需要解析json的類
class User{
  User(this.userName,this.password);
  @JsonKey(name:"name")//給字段在通過json轉化的時候提供了一個別名
  String userName;
  String password;
//以下是固定寫法,在寫其他實體類時記得替換裏面的名字就可以了
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

在寫完這些會發現有些地方還標紅,不能正常使用,我們還需要編譯一下自動生成沒有的類和代碼。我們需要在項目的根目錄下運行:

flutter packages pub run build_runner build

或者:

flutter packages pub run build_runner watch

第一種方式是手動構建,如果我們創建了需要轉換的實體後需要進行一次構建。第二種是啓動觀察器自動幫助我們構建,當發現有需要轉換的實體後會自動編譯幫助我們構建缺少的文件。
如果運行上面的命令出現了下面的錯誤提示還需要我們引入自動構建的類庫:

Could not find package "build_runner". Did you forget to add a dependency?
pub finished with exit code 65

添加類庫:

dependencies:
	build_runner: ^1.10.0

然後就可以正常使用了,實體類的創建看起來比較繁瑣,其實已經有很多的第三方已經幫助我們做好了創建實體類的工具,比如:
1、在線生成工具:JsonToDart
2、以Android Studio爲例可以安裝FlutterJsonBeanFactory插件,安裝成功後,我們選擇菜單欄的File->New的時候就多出了一個JsonToDartBeanAction,輸入類名和想要解析的Json就得到了想要的Bean。
準備工作做好了,在使用的時候我們看下如何使用,還是以上一個例子中的json爲例:

	//序列化爲User對象
	User user = User.fromJson(json.decode(jsonStr));
    //將對象轉化爲String類型
    var userStr = User("flutter","pwd11").toJson();

面對複雜的對象類型還需要好好看下如果做好合理的結構,本篇的基本Json解析就學到這了。

接下來我們來一起學習Flutter的動畫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章