Dart の JSON エンコード・デコード処理の Tips 集
主にfreezedパッケージでのJSON エンコード・デコードが絡むコードに関するテクニック
Published in
32 min readAug 30, 2022
Dart/FlutterでのJSONエンコード・デコードは、以下のドキュメントで一通り説明されていて、単純に扱う分にはまずこれを参考にするのが良いです 👌
実際のプロジェクトでは、ここではカバーし切れていない細かい知識・テクニックが必要になることも多く、本記事ではそのあたりを説明していきます。
まず、前置きとして、たまに議論になる”JSON”という言葉の扱いについて触れます。
Dart での JSON の扱い
JSONの定義は以下のように定められています。
そのため例えば、FirestoreのTimestampなどが入ったMap構造は”JSON”ではないです。なので、そういった値を含むものをJSONと呼ぶのはおかしいという声をたまに聞きます。
それはそうですが、Dartの場合は以下が慣例になっているため、厳密な定義に拘らず「JSON構造の Map<String, dynamic>
」をJSONと呼んで済ませる程度の割り切りをするのが良いと思っています。
- エンコード:
Map<String, dynamic> toJson() => {...};
形式のメソッド定義 - デコード:
fromJson(Map<String dynamic> json)
名前付きコンストラクタ定義