在學習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);
}
---------------------