Android Studioで、Flutterを使ってJSONを扱う方法。
色々なサイトで、記載されているのですが、記載している内容にばらつきがあり、ビルド出来ないものがあったりと大変だったので、記事にしました。
必要なものを定義
JSONを扱うプラグインは、色々あるのですが、今回はjson_annotation
とjson_serializable
を使用します。
pubspec.yml
dependencies:
json_annotation: ^4.1.0
dev_dependencies:
build_runner: ^2.1.2
json_serializable: ^5.0.2
モデルを定義
user.dart
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
int userId;
int id;
String title;
bool completed;
@JsonKey(name: '_type')
String? type;
User(
{required this.userId,
required this.id,
required this.title,
required this.completed,
this.type});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
- 解説
import 'package:json_annotation/json_annotation.dart';
こちらを記載しても参照出来ない場合は、Android Studioを再起動してみてください。
part 'user.g.dart';
記載している段階では、エラーとなっていますので、Android Studioのターミナルで下記を実行してください。
flutter packages pub run build_runner build
@JsonKey
で、名前を変更することが可能です。
こちらで、JSONを扱うことが出来ます。
JSONに変換
import 'package:myapp/user.dart';
import 'dart:convert';
User paserUser() {
String text = '''
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false,
"_type": null
}
''';
var decode = json.decode(text);
User user = User.fromJson(decode);
return user;
}
他のサイトでは、DartのNull safetyに対応してなかったりとかなり苦労しましたので、参考になればと思います。