0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

json_serializableでJSONの読み書き

Last updated at Posted at 2024-02-18

はじめに

json_serializableパッケージを使うとjsonをモデルバインドできますが、パッケージのリファレンスにはJSONの読み書き例が書いていないので私が試した方法を記しておきます。

パッケージの追加

https://pub.dev/packages/json_serializable
https://pub.dev/packages/json_annotation
https://pub.dev/packages/build_runner

json_serializableを利用するにはjson_annotationも必要になります。またdart run build_runner buildコマンドでエラーが出たら別途build_runnerもpub addします。

Settingモデルの作成

@JsonSerializable()
class Setting {
  final String memo;
  Setting({required this.memo});
  factory Setting.fromJson(Map<String, dynamic> json) =>
      _$SettingFromJson(json);
  Map<String, dynamic> toJson() => _$SettingToJson(this);
}

Exampleを見ながらmodelを作成します。ここでのSettingモデルとはアプリの構成を保存するための自前で用意するモデルのことを指します。そういうmodelが動作を確認するためにメンバはmemoだけの最小構成としました。

partファイルを指定する

import 'package:json_annotation/json_annotation.dart';

part 'example.g.dart';

Exampleではexample.g.dartとなっていますが、利用するdartのファイル名を揃えます。main.dartであればmain.g.dartとします。

モデルバインドしながらJSONの読み書き

var jsonFile = File("D:\\flutter.json");

// モデルからJsonへの書き出し
// Model to Write Json
var model = Setting(memo: "メモ");
var enc = jsonEncode(model.toJson());
await jsonFile.writeAsString(enc);

// Jsonからモデルへの読み込み
// Model from Read Json
if (jsonFile.existsSync()) {
  var contents = await jsonFile.readAsString();
  var dec = jsonDecode(contents);
  var model = Setting.fromJson(dec);
  debugPrint('memo=${model.memo}');
}

記事によってはjson.encodeやjson.decodeとしている場合があるかと思いますが、json.dartの実装を見ると例えばjsonEncodeメソッドは以下のようになっているためどちらの書き方でもいいのかもしれません。

String jsonEncode(Object? object,
        {Object? toEncodable(Object? nonEncodable)?}) =>
    json.encode(object, toEncodable: toEncodable);

🔰おわり

私はFlutter初心者🔰なので今回はじめてJsonに触れました。ちょっとクセがありますがアプリの設定ファイルはxmlではなくjsonに決めようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?