Flutter学習総括(十九、FlutterのJson解析)
8213 ワード
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
1つ目の方法は、変換が必要なエンティティを作成した後、手動で構築することです.2つ目は、オブジェクトを起動して自動的に構築を支援し、変換が必要なエンティティが発見されると、不足しているファイルの構築を自動的にコンパイルします.上のコマンドを実行すると、次のエラー・プロンプトが表示され、自動的に構築されたクラス・ライブラリを導入する必要があります.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が1つ増えました.クラス名と解析したいJsonを入力すると欲しいBeanが得られる.準備ができました.使用するときは、どのように使用するかを見てみましょう.それとも、上記の例のjsonを例にします. // User
User user = User.fromJson(json.decode(jsonStr));
// String
var userStr = User("flutter","pwd11").toJson();
複雑なオブジェクトタイプに対して、合理的な構造ができていれば、本編の基本的なJson解析はこれを学ぶ必要があります.
次にFlutterのアニメーションを学びましょう
import 'dart:convert';
String jsonStr = '{"username":"flutter","password":"pwd"}';
Map<String,dynamic> decode = json.decode(jsonStr);// json Map
print("username is ${decode['username']}");// Map username key
String codeStr = json.encode(decode);// encode
print("codeStr is ${codeStr}");// json
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
// User
User user = User.fromJson(json.decode(jsonStr));
// String
var userStr = User("flutter","pwd11").toJson();