Dart 和 Flutter 使用json_annotation和json_serializable來處理json數據教程


在學習fultter的時候突然想到如何去處理從服務器獲取的json或者將app中的對象數據轉換成json上傳給服務器

於是研究一下dart對json數據的處理

首先需要依賴下面的第三方庫(這里要強調下,第三方庫的版本很重要,市面上目前很多的教程文章用的都是老版本的庫,所以

很多舊方法都不支持了,本教程是用最新的庫為案例寫的)

dependencies:
json_annotation: ^2.4.0

dev_dependencies:
fluttertoast: ^2.0.3
json_serializable: ^3.0.0
build_runner: ^1.6.0
首先我們需要創建用來解析或者轉換成json的dart實體類

import 'package:json_annotation/json_annotation.dart';
part 'Author.g.dart';
@JsonSerializable()
class Author {
String name;

Author(this.name);

@override
String toString() {
return 'Author{name: $name}';
}
factory Author.fromJson(Map<String, dynamic> json) => _$AuthorFromJson(json);

Map<String,dynamic> toJson() => _$AuthorToJson(this);

}
這里有幾點需要注意的

1、當我們初次創建Author.dart的時候,需要加入    part 'Author.g.dart';  雖然系統會提示報錯,但是不必緊張,這個我們一會生成Author.g.dart文件所必須的條件,我們暫時不要管它報不報錯

2、在需要轉換的實體dart類前 加入@JsonSerializable()注解,表示需要json序列話處理

3、fromJson()  方法和 toJson()方法的寫法是固定模式的,大家按模板修改就行

接下來我們就該見證奇跡的發生了

我們cd到項目的根目錄,然后使用  flutter packages pub run build_runner build  這條指令去生成Author.g.dart文件

然后我們就會在Author.dart的下面發現一個Author.g.dart文件,到此結束,我們開始驗證是否有效

編寫測試類

import 'dart:convert';
import 'Author.dart';

void main(http://www.my516.com) async{

//模仿從服務端返回端json數據格式
var obj = {"name":"Jams"};

//創建一個author類,復制名字為xueqi
var b = new Author("xueqi");
//打印字符串
print(b.toString());
//將author轉成json字符串,打印出來
String s = json.encode(b);
print(s);
//將obj的json數據轉換成Author實體類,然后打印Author的屬性name
var c = Author.fromJson(obj);
print("作者的名字是:"+c.name);
}

---------------------


免責聲明!

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



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