Dartの勉強10-2:クラス(JSONの取扱い)
JSONはMap型と親和性の高い形式ですが、クラスを使うと型安全で可読性も上がり、再利用できて、フィールドの変更があってもクラスの変更だけで対応できて保守性も上がるいいことずくめだということです。
import 'dart:convert';
class User {
String name;
int age;
List skills;
User({required this.name, required this.age, required this.skills});
// JSONからUserオブジェクトを生成
factory User.fromJson(Map json) {
return User(
name: json['name'],
age: json['age'],
skills: List.from(json['skills']),
);
}
// UserオブジェクトをJSONに変換
Map toJson() {
return {
'name': name,
'age': age,
'skills': skills,
};
}
}
void main() {
String jsonString = '{"name": "Otani", "age": 30, "skills": ["Picher", "Batter"]}';
// JSON文字列をMapに変換(キーの値はDynamicにして様々な型に対応できるようにしておく)
Map userMap = jsonDecode(jsonString);
// MapからUserオブジェクトを生成
User user = User.fromJson(userMap);
print(user.name); // Otani
print(user.skills); // [Picher, Batter]
// UserオブジェクトをJSON文字列に変換
String newJsonString = jsonEncode(user.toJson());
print(newJsonString);
// {"name":"Otani","age":30,"skills":["Picher","Batter"]}
}
自分で、変換するコードを書くのが面倒な人向け(ただし、動かすまで大変だった)
1.dartプロジェクトを作成する。
dart crate my_project
my_projectフォルダをVS Codeで開く。
2.コードを書く
(lib/my_project.dart)
import 'package:json_annotation/json_annotation.dart';part 'my_project.g.dart';
@JsonSerializable()
class User {
String name;
int age;
Listskills; User({required this.name, required this.age, required this.skills});
factory User.fromJson(Map
json) => _$UserFromJson(json);
MaptoJson() => _$UserToJson(this);
}(bin/my_project.dart)
import 'package:my_project/my_project.dart';void main() {
var user = User(name: 'Otani', age: 30, skills: ['Picher', 'Batter']);
print(user.toJson());
}
3.3つのパッケージを導入する。(2つ目と3つ目はdev_dependencies:に置かれる)
dart pub add json_annotation
dart pub add dev:build_runner
dart pub add dev:json_serializable4.build_runnerを起動する
dart run build_runner buildこれで
dart runで行けると思います。